Ответ 1
Вам нужен объект модели данных, который хранит данные для приложения.
Модель данных - это индивидуальный автономный объект, доступный из любого места приложения. Объект модели данных ничего не знает о каких-либо представлениях или контроллерах представления. Он просто хранит данные и логические отношения между этими данными.
Когда разные части приложения должны писать или читать данные, они записывают и читают модель данных. В вашем случае view1 сохранит свои данные в модели данных при ее разгрузке, а затем view2 будет считывать данные из модели данных при загрузке (или наоборот).
В правильно спроектированном приложении никакие два контроллера представления не должны иметь доступ к внутренним данным другого контроллера. (Единственная причина, по которой диспетчеры представлений должны знать о существовании другого контроллера, - это если он должен запускать загрузку этого другого контроллера.)
Быстрый и грязный способ создания модели данных состоит в том, чтобы добавить атрибуты к делегату приложения, а затем вызвать делегата приложения из контроллеров представления, используя:
YourAppDelegateClass *appDelegate = [[UIApplication sharedApplication] delegate];
myLocalProperty = appDelegate.someDataModelProperty;
Это будет работать для небольшого проекта, но по мере того, как ваши данные будут сложными, вы должны создать выделенный класс для своей модели данных.
Edit:
Чтобы уточнить ваш конкретный случай, вы должны добавить вызов модели данных, когда приемник viewController станет активным.
Размещение данных в методе init или viewDidLoad
не будет работать, потому что в UITabBar
пользователи могут переключаться туда и обратно, не выгружая представление или повторно инициализируя контроллер вида.
Лучшее место для извлечения измененных данных - в методе контроллера viewWillAppear
. Таким образом, данные будут обновляться каждый раз, когда пользователь переключается на эту вкладку.