Требуются советы по архитектуре ядра данных iOS - PullRequest
7 голосов
/ 01 августа 2011

Я просто хочу получить несколько советов о том, как лучше всего спроектировать мое первое приложение Core Data, а также об основных объектах и ​​взаимодействиях, которые мне потребуются.

Данные хранятся удаленно, и мне потребуется доступэто через HTTP, и это ответит в формате JSON.Я хочу кешировать это на устройстве с помощью Core Data.Каждый день на сервере будут появляться новые данные, поэтому мне нужно получить к ним доступ и соответствующим образом обновить модель.

Существуют ли какие-либо классы SDK, которые я могу использовать, чтобы помочь мне в этом, или я собираюсь сдать экзамен вручнуюЭто?

Полагаю, я смотрю на Model Controller, который я вызываю для получения данных, он вернет кэшированные данные основных данных и, возможно, сделает фоновый вызов веб-службы, чтобы получить последние данные, а затем уведомитьмнение, что есть новые данные.Когда я получаю данные из веб-службы в формате JSON - мне нужно сопоставить их с ManagedObjects, добавлением в мой основной контекст данных.

Ответы [ 3 ]

5 голосов
/ 03 августа 2011

Спасибо dtuckernet, вот что я сделал - собрал информацию из множества источников, которые, я считаю, является лучшим решением. Любой может смело критиковать (конструктивно) ....

  1. У меня есть Core Core Data в CoreDataStack.h (singleton) - не совсем необходим, но он не загромождает мой класс делегата приложения.
  2. У меня есть базовый CoreDataBackedTableViewController: UITableViewController
  3. Каждый из моих экранов табличного представления расширяет CoreDataBackedTableViewController и содержит ивар для класса ModelController.
  4. Пример класса ModelController имеет метод - (NSFetchedResultsController *) getData, который создает NSFetchedResultsController (также сохраняет ссылку на него) и возвращает его в контроллер представления, который также сохраняет его в CoreDataBackedTableViewController (который прослушивает обновления и изменения в данные). Наличие класса ModelController позволяет мне инкапсулировать свой доступ к данным, чтобы потенциально использовать его для двух разных контроллеров представления (возможно, iPhone и iPad)
  5. В getData - я асинхронно вызываю свой серверный веб-сервис. Использование делегатов для обратных вызовов
  6. Сервер использует SBJSON для синтаксического анализа, NSHttpConnection и класс HttpService, созданный вручную.
  7. Когда сервер возвращается с данными, он вызывает делегата в ModelController, который обновляет данные ядра - и мой fetchedResultsController знает об этом и автоматически обновляет мой интерфейс! Насколько это круто - с моей стороны не так много усилий. Я должен определить, загружал ли я данные раньше или нет, чтобы избежать дублирования.
  8. Готов выкатить это на остальную часть моего приложения ....

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

3 голосов
/ 03 августа 2011

Вы, безусловно, хотите использовать RESTKit . Это прямое соединение вашего веб-сервиса RESTful с Core Data. Определите модель данных, используя встроенный инструмент XCode, определите слой отображения для вашего веб-сервиса, используя RESTKit, и позвольте библиотеке выполнять тяжелую работу. Это прекрасно.

3 голосов
/ 01 августа 2011

Здесь много разных пьес. Позвольте мне сделать несколько предложений:

  1. Для получения данных с сервера я бы посмотрел на ASIHTTPRequest. Это хорошее решение для управления вашими HTTP-запросами (используете ли вы JSON, XML или что-то еще). http://allseeing -i.com / ASIHTTPRequest /
  2. Для перевода в формате JSON я бы посмотрел на SBJSON. На сайте есть документация с чего начать: http://code.google.com/p/json-framework/
  3. Для вашей общей архитектуры я бы реализовал шаблон делегата, который оборачивает ваши сервисные вызовы. В этом делегате вы выполняете преобразование данных JSON в фактические классы Objective-C, прежде чем данные будут переданы остальной части приложения.
  4. Как только данные будут проанализированы и помещены в объекты Objective-C (и я хотел бы, чтобы эти объекты были подклассами NSManagedObject, который связан с каталогом вашей модели данных), я выполняю сохранение.
  5. Затем я бы использовал NSNotification для информирования необходимых представлений об изменении данных.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...