Элегантный способ поделиться и изменить массив между контроллерами представления - PullRequest
1 голос
/ 10 ноября 2010

У меня есть два контроллера вида: LocationsViewController и SettingsViewController. LocationsViewController соответствует протоколу SettingsViewControllerDelegate. Этот протокол содержит только 1 метод:

// SettingsViewControllerDelegate.h
- (void)settingsViewControllerDidFinish:(SettingsViewController *)controller;

Когда мой LocationsViewController получает сообщения делегата, он отклоняет SettingsViewController, который был представлен модально.

Я думаю, что это хороший дизайн кода. Проблема заключается в обмене данными между этими контроллерами представления. Оба контроллера представления представляют одни и те же данные: массив из примерно 10 объектов (местоположений). Только SettingsViewController позволяет изменять этот массив.

Прямо сейчас я «решил» это нелегким способом: оба контроллера представления имеют ссылку на моего делегата приложения, а мой делегат приложения имеет свойство locations. SettingsViewController изменяет этот массив напрямую. Например:

// SettingsViewController.m
[appDelegate.locations addObject:newLocation];

Это работает, но я не доволен этим. Я понимаю, что плохо, если ваши контроллеры представления сохраняют ссылку на делегат приложения. Есть предложения?

Ответы [ 2 ]

3 голосов
/ 10 ноября 2010

Возможно, вы захотите использовать наблюдатель, чтобы следить за изменениями в массиве, я думаю.Я мог что-то напечатать, но в StackOverFlow уже есть отличные ответы.

Наблюдение значения ключа с помощью NSArray

1 голос
/ 10 ноября 2010

В подобных ситуациях я использую одноэлементный объект Settings. Это просто NSObject, в котором есть методы для настроек в моем приложении. Я получаю экземпляр, позвонив +[Settings settings]. Некоторые настройки являются просто оболочкой для NSUserDefaults, и в этом случае я просто определяю статические методы.

Синглтоны тоже не считаются лучшей практикой, но они используются повсеместно в SDK (плюс, передача экземпляров настроек всем становится быстро раздражать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...