iphone - objective - uitabbarcontroller uinavigationcontroller



iPhone: как передавать данные между несколькими Viewcontrollers в приложении Tabbar (2)

У меня есть следующая проблема:

Я создал приложение с вкладками с 4 вкладками. Я хочу передать объект / переменную из первого контроллера вкладки в третий и инициализировать этот контроллер соответствующим объектом.

Я уже провел некоторое исследование. Лучший способ, соответствующий чистому подходу к модели, - вызвать вызов метода initWithObject: на вызываемом контроллере view. Как я могу это достичь? Как я могу вызвать метод init приемника в контроллере вызывающего абонента? Можете ли вы привести мне пример кода?

Изменить. Чтобы передавать данные между несколькими видами / классами и т. Д., Просто создайте класс данных типа «Вид», который содержит данные, разделяемые между несколькими классами. Для получения дополнительной информации перейдите по ссылке: Singleton


Answer #1

Вам нужен объект модели данных, который хранит данные для приложения.

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

Когда разные части приложения должны писать или читать данные, они записывают и читают модель данных. В вашем случае view1 сохранит свои данные в модели данных при ее разгрузке, а затем view2 будет считывать данные из модели данных при загрузке (или наоборот).

В правильно спроектированном приложении никакие два контроллера представления не должны иметь доступ к внутренним данным другого контроллера. (Единственная причина, по которой диспетчеры представлений должны знать о существовании другого контроллера, - это если он должен инициировать загрузку этого другого контроллера.)

Быстрый и грязный способ создания модели данных состоит в том, чтобы добавить атрибуты к делегату приложения, а затем вызвать делегата приложения с контроллеров представления, используя:

YourAppDelegateClass *appDelegate = [[UIApplication sharedApplication] delegate];
myLocalProperty = appDelegate.someDataModelProperty;

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

Редактировать:

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

Размещение данных в методе init или viewDidLoad не будет работать, потому что в UITabBar пользователи могут переключаться взад и вперед, не выгружая представление или повторно инициализируя контроллер вида.

Лучшее место для извлечения измененных данных - это viewWillAppear контроллера viewWillAppear . Таким образом, данные будут обновляться каждый раз, когда пользователь переключается на эту вкладку.


Answer #2

Возможно, вы захотите рассмотреть NSNotificationCenter ( Reference ); вы регистрируете один диспетчер просмотра в центре уведомлений приложения и отправляете уведомление при выборе. Когда уведомление получено, другой диспетчер представлений соответственно обновляет.





uitabbarcontroller