2010-12-02 1 views
0

В настоящее время я работаю над приложением, которое использует UINavigationController внутри UITabBars. Таблицы вкладок соответствуют как UITableViews, так и Map View. Тем не менее, контроллер корневого представления приложения не является родительским или прямым родителем настраиваемых контроллеров UITableView и контроллера отображения карты. У меня также есть p-список, который создает объекты NSDictionary; это источник данных, который я использую для заполнения записей в таблицах и карте.Сохранение источника данных между несколькими видами без общего контроллера корневого представления

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

Есть ли альтернативная реализация, так что мне не нужно воссоздавать NSDictionary в каждом контроллере представления?


Этот учебник с изображением руководство одноплодной аккуратно объясняет все: http://www.cocoanetics.com/2009/05/the-death-of-global-variables/

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

ответ

0

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

0

Вы должны ознакомиться с архитектурой Model-View-Controller (MVC). В частности, вы, вероятно, захотите ввести модель данных, в которой вы должны создавать и заполнять словарь во время инициализации, а затем обращаться к нему со всех ваших контроллеров представлений.

2

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

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

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

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

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

MyAppDelegateClass *appDelegate=[[UIApplication sharedApplicaton] delegate]; 
myLocalProperty=appDelegate.someDataModelProperty; 

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

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

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

+0

Хорошо, было бы плохой формой дать каждому контроллеру вида экземпляр той же модели данных через список свойств? Сам список p-list никогда не изменяется самим приложением. Это всего лишь общая схема моей программы: | делегат приложения программы -> контроллер корневого представления -> панель управления панелью -> контроллер навигации -> пользовательские контроллеры табличного представления | Поэтому, если я поместил логику модели данных в делегат приложения, я не уверен, как она «дойдет» до пользовательских контроллеров Table View. Вот почему я создаю копии модели данных/p-списка в каждом t.v. контроллер. – 2010-12-02 23:03:18

+0

Я предполагаю, что я прошу, мой подход ошибочен, и если да, то какой способ его исправить? С одиночками? – 2010-12-02 23:25:20

 Смежные вопросы

  • Нет связанных вопросов^_^