Новое в Core Data для iphone

Я новичок в платформе iphone и создаю приложение, которое получает RSS-канал и отображает его в UITableView. У меня это работает отлично (точнее, так, как я хотел). Я думал, что сохраню текущие элементы канала на телефоне, чтобы он изначально загружал старые элементы, которые он хранил, пока он получает новый канал, затем анализирует новый канал, добавляет новые элементы и обновляет TableView. Я собирался использовать Core Data для хранения старых элементов фида, потому что это был бы хороший способ изучения Core Data и подходящее использование Core Data. Однако мне сложно научиться использовать Core Data и подключать их к таблице / массиву.

Я уже гуглил и смотрел stackoverflow для руководств, но еще не нашел ничего, что объясняло бы это так, как я действительно понимаю. Мы будем очень благодарны за любое объяснение общих шагов, которые необходимо предпринять для добавления Core Data в существующее приложение. Полноценные детали не требуются (но также были бы полезны). Я просто не очень разбираюсь в SQL или хранении данных таким образом, и у меня проблемы с пониманием того, как работает вся концепция Core Data и как она связана со всем.

Кроме того, будет оценен любой лучший способ сделать то, что я пытаюсь достичь.


person ACBurk    schedule 01.11.2009    source источник


Ответы (5)


Существуют шаблоны Xcode для приложений на основе Core Data; это отличное начало для развития Core Data. Однако похоже, что вы хотите интегрировать Core Data в свое существующее приложение, поэтому вам нужно ...

  • Добавьте три основных объекта Core Data: контекст управляемого объекта (MOC), модель управляемых объектов (MOM) и координатор постоянного хранилища (PSC). Они должны быть доступны везде, где вы хотите, чтобы были доступны основные данные, поэтому либо в делегате вашего приложения, либо, что более предпочтительно, в контроллере или источнике данных для представления таблицы.
  • Создайте MOM в Xcode. Это будет файл типа .xcdatamodel, и это граф объектов, который определяет все сущности Core Data, которые вы хотите использовать в своем приложении.
  • Используйте NSFetchedResultsController (как было предложено Луи Гербаргом), чтобы получить данные из Core Data и отобразить их в виде таблицы.
  • Добавьте код в существующие подпрограммы RSS-выборки и синтаксического анализа для сохранения новых объектов Core Data обратно в хранилище, когда это необходимо.

Хороший способ начать - просто создать новое приложение Core Data и немного поэкспериментировать с ним; вы также можете посмотреть фантастические ресурсы Apple по этой теме, например Руководство по программированию основных данных и примеры приложений Рецепты и местоположения . (Может потребоваться регистрация разработчика.)

И последнее, что следует отметить: по большей части, большая часть кода Core Data, который вам нужно добавить, может быть извлечена прямо из одного из приложений-шаблонов Xcode и вставлена ​​в вашу программу (это особенно верно для аксессуаров для три необходимых вам объекта Core Data). Однако будьте осторожны, чтобы не использовать непонятный вам код.

person Tim    schedule 01.11.2009

Если вы используете CoreData для заполнения UITableView, вы действительно хотите использовать NSFetchedResultsController, а не пытаться самостоятельно заполнить и синхронизировать массив. Документация для NSFetchedResultsController включает ссылки на несколько руководств по CoreData, включая те, которые заполняют представления таблиц.

person Louis Gerbarg    schedule 01.11.2009

NSFetchedResultsController все еще немного глючит и требует нестабильных обходных путей. Я бы начал с более простого учебника «Местоположение» основных данных iPhone, прежде чем перейти к учебнику «Книги».

person Alex Reynolds    schedule 01.11.2009
comment
Можете быть более конкретными? Я припоминаю несколько ошибок, имевших довольно неприятные последствия в версии 3.0, но я почти уверен, что NSFetchedResultsController достаточно стабилен и может использоваться в версии 3.1. Есть ли еще нерешенные вопросы, о которых я просто не знаю? - person Tim; 03.11.2009
comment
При перемещении строк контроллер выборки ссылается на промежуточные индексы своего внутреннего массива. Если указанные индексы больше не существуют, последующая перезагрузка разделов вызывает немедленный сбой. - person Alex Reynolds; 03.11.2009

Кроме того, был бы признателен любой лучший способ сделать то, что я пытаюсь выполнить.

да, похоже, Core Data может быть излишним для вашего приложения. Предполагая, что ваши элементы фида хранятся в объекте коллекции, вы можете легко использовать OSX встроенная сериализация.

person Rog    schedule 01.11.2009

Было отмечено в других сообщениях Stack-Overflow, но я настоятельно рекомендую книгу Prag Prog «Основные данные: API Apple для сохранения данных в Mac OS X» - большинство из них также актуально для приложений iPhone Core Data; также есть целая глава о создании приложения для iPhone.

http://pragprog.com/titles/mzcd/core-data

person petert    schedule 01.12.2009