iphone - objective - uitabbarcontroller uinavigationcontroller



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Answer #1

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





uitabbarcontroller