Core-Data: хотите сохранить новые данные в формате xml в моем хранилище данных, а не заменить существующие - PullRequest
0 голосов
/ 08 января 2010

У меня есть приложение, которое загружает данные ядра, а затем вызывает веб-службу XML для получения обновленных данных. По сути, я хочу, чтобы мое приложение не стерло все данные и загрузило все (включая новые) для сохранения, я хочу, чтобы оно добавляло только новый материал в существующий стек (без дублирования).

Какова общая консенсусная стратегия для чего-то подобного?

Ответы [ 3 ]

1 голос
/ 08 января 2010

Я извлекаю NSSet* всех сохраняемых объектов и затем выполняю операцию пересечения для этого набора экземпляров NSManagedObject с новым управляемым объектом, который заполняется данными из отдельного элемента XML и его содержимым.

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

Если у меня есть пустой набор, вновь созданный управляемый объект сохраняется непосредственно в хранилище данных.

У меня нет доступного значения хеш-функции для сравнения между постоянными данными и данными XML, поэтому это работает достаточно хорошо.

1 голос
/ 08 января 2010

Если у каждого элемента в вашем наборе данных xml есть уникальный ключ, вы можете просто использовать этот ключ, чтобы найти существующую запись и обновить ее новой информацией

0 голосов
/ 08 января 2010

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

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

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

...