Каков наилучший способ обратной связи между контроллерами представления? - PullRequest
1 голос
/ 15 октября 2010

Я думал об этом и прочитал еще один вопрос stackoverflow относительно наилучшего рекомендуемого способа связи между контроллерами представления. Тем не менее, вопрос / ответ на этот вопрос, похоже, не относится к лучшему подходу к обратному поведению.

т.е. чтобы передать данные из ParentController в ModalController, мы могли бы инициализировать ModalController как initWithDataToProcess:.

Но что, если мы хотим сделать реверс ? Как бы я уведомил предыдущий контроллер о новых данных?

например. Пользователь нажимает кнопку «новый человек» на ParentController. Я инициирую новый ModalController и предоставляю пользователю представление редактора персон через presentModalViewController:. Пользователь нажимает «Готово», чтобы добавить нового человека. I dismissModalViewController: и пользовательский интерфейс возвращается к виду ParentController.

Использование глобального поля ссылки в одноэлементном объекте (делегат приложения или другое) недопустимо. делегирование (через официальный протокол) и уведомления (через NSNotificationCenter) кажутся излишними. Есть предложения?

Ответы [ 2 ]

1 голос
/ 15 октября 2010

Обычно чище использовать уведомления. Просто добавьте своего наблюдателя вот так ....

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(somethingHappened:) name:@"MyNotification" object:nil];

и в других местах вашего кода вы будете публиковать уведомления всякий раз, когда это необходимо.

[[NSNotificationCenter defaultCenter] postNotificationName:@"MyNotification" object:self];

В примере я передаю себя, но вы можете передать любой объект, который вам действительно нужен, и он будет передан вашему нечто

Важно, чтобы @ "MyNotification" был очень описательным и уникальным. Добавление названия вашего проекта в начало - это хороший способ сохранить уникальность ... например. @ "ProjAXViewHasGotData"

0 голосов
/ 15 октября 2010

Делегат - это минимум того, что вы можете сделать.Если вы считаете, что объявлять новый протокол для этого слишком сложно, просто передайте родительский контроллер представления, и пусть модальное вызовет метод для него.

...