2013-03-27 2 views
0

Я использую основные данные для своих функций хранения. В какой-то момент я делаю внешние вызовы API, которые требуют от меня обновления локального графа объектов. Мой текущий (немой) план состоит в том, чтобы очистить все экземпляры старых NSManagedObjects (независимо от того, были ли они обновлены) и заменить их новыми эквивалентами - политикой слияния trump.Использование основных данных в виде кеша

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

+0

У Apple есть хорошее руководство по требованиям - [Эффективный импорт данных] (https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdImporting.html). Особенно проверьте раздел, называемый ** Реализация Find-or-Create Efficiently **. –

ответ

0

Ваша стратегия сопоставления, основанная на уникальных идентификаторах сервера, является хорошим подходом. Надеемся, вы можете заставить свой сервер поставлять только те объекты, которые были изменены с момента последнего обновления (которое вы будете отслеживать и предоставлять в вызове сервера).

Чтобы обновить объекты Core Data, вам нужно будет их получить, создать экземпляр NSManagedObjects, внести изменения и сохранить их. Вы можете сделать это все в фоновом потоке (детский контекст, performBlock:), но вам все равно придется объединять объекты в памяти и обратно в хранилище. Выполнение этого в дочернем контексте и его собственном потоке будет поддерживать ваш пользовательский интерфейс мгновенно, но вам все равно придется выполнять обработку.

Другая идея: В последний день или около того я читал около AFIncrementalStore, реализация NSIncrementalStore, которая использует AFNetworking для предоставления свойств Core Data по запросу, кэширования локально. Я еще ничего не строил, но он выглядит довольно гладко. Похоже, что ваш проект может быть полезным использованием этой библиотеки. Код находится на GitHub: https://github.com/AFNetworking/AFIncrementalStore.

+0

Привет, Хал, я играл с AFIncrementalStore :) Это выглядит довольно потрясающе, но, к сожалению, потребуется много времени, чтобы свернуть собственный магазин, что с недостатком примеров реализации там. Даже если бы я реализовал свой собственный магазин, я все еще не уверен, как это поможет мне слиянием данных из моего «сетевого» магазина с моим местным магазином. В любом случае, спасибо за подсказку! –

Смежные вопросы