Распространение данных среди контроллеров представления - PullRequest
0 голосов
/ 27 апреля 2009

У меня есть контроллер табличного представления. Некоторые строки таблицы открывают новые контроллеры, чтобы пользователь мог вводить больше данных или использовать средства выбора и т. Д. Это похоже на встроенное приложение «Календарь». Когда пользователь нажимает «Сохранить» на втором экране, я хочу, чтобы значение с этого экрана распространялось обратно в контроллер табличного представления, но я не знаю, как это сделать. Поскольку я использую pushNavigationController для перехода на второй экран, нет возможности предоставить указатель обратно на исходный объект. (Это похоже на действительно плохой дизайн, даже если бы это было возможно, так как второй контроллер должен был бы знать кое-что о своем родителе.)

Кроме того, из тестирования кажется, что pushNavigationController не «приостанавливает» оригинальный контроллер, поэтому вы не просто возобновляете работу со следующей строкой кода после появления второго экрана.

Похоже, мне здесь не хватает чего-то действительно простого.

1 Ответ

1 голос
/ 27 апреля 2009

Многие из фреймворков Apple поддерживают шаблон проектирования MVC (Model View Controller). Контроллер (в данном случае UITableViewController) организует сбор данных для передачи в представление (в данном случае UITableView). Чтобы в полной мере воспользоваться этим шаблоном, ваши данные должны быть получены из объекта Model. Это объект, который вы разрабатываете для представления своих данных, обеспечивая абстракцию, так что ваша реализация пользовательского интерфейса и ваши данные слабо связаны. Когда ваш контроллер выдвигает другой контроллер для дальнейшей проверки или редактирования данных, объект Model передается этому контроллеру, чтобы новый контроллер мог получить доступ к данным, содержащимся в модели. Пользователь изменяет данные в пользовательском интерфейсе, а затем при нажатии «Сохранить» объект модели изменяется.

Существует несколько способов передать изменение обратно в UITableViewController, когда пользователь нажимает кнопку «Сохранить». Вы можете использовать KVO (наблюдение значения ключа), в соответствии с которым таблица или одна из ее ячеек уведомляются при изменении свойства объекта модели. Другой способ - использовать уведомления NSNotificationCenter между двумя контроллерами для передачи изменений.

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