Как синхронизировать отношения Core Data? - PullRequest
0 голосов
/ 01 сентября 2011

Я создаю приложение, которое извлекает данные с веб-сервера (MySQL), анализирует их и сохраняет в базе данных SQLite с использованием Core Data.

В базе данных MySQL есть таблица слов. Каждое слово может быть в «категории». Таким образом, таблица слов имеет поле для 'category_id', чтобы присоединиться к таблицам.

У меня возникли некоторые проблемы, когда я не могу понять, как воспроизвести это локально в моем приложении. В настоящее время у меня есть объекты, соответствующие структуре базы данных MySQL, но нет отношений. Похоже, что в моей сущности «слова» мне не нужно поле «category_id» (вместо этого мне нужно установить отношение «один к одному»).

Я не совсем понимаю, как синхронизировать эти отношения базовых данных с веб-сервером?

1 Ответ

1 голос
/ 01 сентября 2011

Предполагая, что у вас есть Entity для Word и Category, вам понадобится установить отношения (наименование может быть немного туманным).Также при условии, что Category может иметь много слов и

// Word Entity
Relationship    Destination    Inverse
category        Categories     words

// Category Entity
Relationship    Destination   Inverse
words           Word          category       // To-Many relationship

Вы правы, вам не понадобится поле category_id, так как все отношения управляются через граф объектов, который поддерживает Базовые данные.Вам все еще понадобится первичный ключ, такой как server_id (или аналогичный) в каждой сущности, или у вас возникнут проблемы с обновлением / поиском уже сохраненных объектов.

Вот как я справляюсь с синхронизацией данных из внешней базы данных (яиспользовать интерфейсы RESTful с JSON, но это не имеет большого значения)

  1. Захватить фид, отсортированный по server_id
  2. Получить первичные ключи (server_id) всех объектов в фиде
  3. Выполните выборку, используя предикат, подобный ... @"(serverId IN %@)", primaryKeys, который отсортирован по первичному ключу.
  4. Пройдите по каждому массиву.Если результат выборки содержит мою запись, я обновляю ее.Если этого не произойдет, я вставлю новый.
  5. Вам нужно будет сделать это как для Word, так и для Category
  6. Затем получить все объекты, которые являются частью отношения
  7. Используйте соответствующие методы, сгенерированные основными данными, для добавления объектов.например, что-то вроде `[myArticle addWords: [NSSet setWithObjects: word1, word2, word3, nil];

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

...