Стратегическая проблема: извлечение данных из XML для обновления локальной базовой базы данных? - PullRequest
1 голос
/ 12 февраля 2010

Мне нужен совет, как это сделать:

1) Я получаю XML с веб-сервера.

2) Я хочу сохранить все сущности (т.е. друзей) из этого XML локально на устройстве, используя Core Data.

3) Итак, я анализирую XML и создаю управляемый объект для каждого друга в этом XML

4) Но я хочу убедиться, что я не добавляю одного Друга несколько раз в базу данных. Как мне этого добиться?

-------------- мои стратегические мысли по этому поводу ----------------

A) При анализе XML я создаю управляемый объект сущности Friend, как только запускается элемент Friend. В этот момент я не знаю, каким другом это будет, пока NSXMLParser не пройдёт по всем предстоящим атрибутам, таким как firstName, id и т. Д .; После конечного тега для элемента Friend у меня есть этот друг в контексте моего управляемого объекта. Затем я делаю NSFetchRequest, чтобы посмотреть, сохранен ли уже этот друг. Проблема в том, что новый друг уже является частью контекста, поэтому, вероятно, Core Data всегда будет возвращать совпадение!?

B) Мне нужны два разных контекста управляемых объектов, чтобы проанализированные Друзья сначала отправлялись в MOC_A, а затем я запрашиваю MOC_B (фактическое локальное хранилище) без того, чтобы новые проанализированные друзья мешали моему запросу в локальное хранилище. Так что я могу узнать, существовал ли уже друг.

C) При анализе друга из XML я просто создаю новый экземпляр управляемого объекта БЕЗ добавления его в контекст управляемого объекта (возможно?!). Позже, когда друг полностью срезается, я проверяю данные Core Core на предмет их сохранения. Если нет, я добавлю это. В противном случае я выбрасываю объект.

D) Мне нужна другая стратегия.

1 Ответ

3 голосов
/ 12 февраля 2010

Вам следует использовать новый индексированный атрибут в вашей сущности базовых данных, чтобы сохранить уникальный идентификатор из XML.Перед добавлением объекта вам придется вручную проверить, существует ли объект с таким идентификатором.

ОБНОВЛЕНИЕ
Ключ заключается в том, чтобы не добавлять управляемый объект в контекст доопределили, что он новый.
Это довольно просто, учитывая уникальный идентификатор, но, похоже, вы не можете сначала проанализировать уникальный идентификатор.В этом случае вы должны использовать временный изменяемый словарь (NSMutableDictionary) для хранения данных при их разборе.
Если вы решите, что друг новый, вы можете создать его и скопировать данные из словаря.Если друг не новичок, вы можете отказаться от словаря.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...