Лучший способ передавать данные между объектами в разработке для iPhone? - PullRequest
0 голосов
/ 23 октября 2010

Я работаю над приложением для iphone и не знаю, как лучше всего хранить временные данные между представлениями. например, у меня есть xml на сервере, и я анализирую данные в объект, чтобы я мог хранить информацию. В XML есть некоторые данные, которые я хочу отображать в одном представлении, и другие данные, которые я хочу отображать в другом представлении. У меня есть класс dataStore, в котором я хочу хранить данные в представлениях. Как лучше всего это сделать на iphone?

Я рассмотрел много вариантов, и я думаю, что выбор между:

1) использовать хранилище данных в качестве делегата и хранить данные в делегате, к которому можно получить доступ.

2) использовать хранилище данных в качестве одноэлементного класса и разрешать только один экземпляр класса и получать доступ к данным из общего экземпляра класса dataStore.

3) может быть, даже NSMangedObjectContext, о котором я не знаю, но знаком с андроидным способом передачи данных через контекст и экземпляр приложения.

Если бы кто-то мог помочь мне с выбором наилучшей практики на iphone, я был бы очень признателен.

Ответы [ 4 ]

2 голосов
/ 23 октября 2010

Вы можете объявить, что данные поступили с использованием NSNotification.Вы можете отправить временный объект вместе с уведомлением в качестве отправителя или в информационном словаре.Два объекта, которым требуются части этих данных, могут затем извлекать эти части и сохранять их прямо тогда, и временный объект данных может быть только этим: временным, действующим только до завершения уведомления.Только части, которые нужны вашим представлениям, и о которых заботятся, и каждый контроллер представления может освобождать свою часть всякий раз, когда это имеет смысл.

0 голосов
/ 23 октября 2010

Ни один из них не является по-настоящему MVC. Вы хотите три класса:

  • Модель , которая содержит данные,
  • представление , часто полностью сделанное в IB как .xib,
  • Контроллер представления , который является владельцем файла .xib и содержит данные в качестве поля экземпляра. Этот отвечает за передачу данных модели в представление, и представление устанавливает контроллер представления как его delegate и dataSource. Таким образом, представление может использоваться повторно и обрабатывать только часть данных (т. Е. Ровно столько, сколько реально видно).
0 голосов
/ 23 октября 2010
  1. Нет, вы не можете позволить dataStore быть делегатом.Вы никогда не должны оставлять своих делегатов, так что это не подходящее место для данных, только для поведения.

  2. Скорее всего, синглтон.Вероятно, у вас есть модель вашего приложения, есть ли причина, по которой ваше приложение должно обрабатывать две модели?Может ли он показать много документов одновременно?Не пишите ни одной строки кода, чтобы попытаться не дать клиенту вашего синглтона создать второй экземпляр!Objective-C - это динамическая среда выполнения, и постоянный пользователь сможет это сделать в любом случае, поэтому все, что вам нужно сделать, это добавить больше строк кода с потенциальными ошибками.Базовые данные и NSManagedObjectContext, пока вам действительно не нужно.И вам это нужно только в том случае, если вы намереваетесь обработать в вашей модели больше данных, чем когда-либо может поместиться в ОЗУ.

0 голосов
/ 23 октября 2010

В вашем случае я бы рекомендовал превратить класс dataStore в одноэлементный. В синглтоне анализируют данные и имеют методы, которые возвращают необходимую информацию для представления. Базовые данные (managedObjects) хороши, если вы хотите, чтобы данные сохранялись при запуске. Сохранение данных в appDelegate - это последний вариант, который я бы выбрал.

...