2013-03-04 5 views
3

Использование RestKit v0.20.0-rc1, мне удалось успешно создать сопоставления CoreData и импортировать объекты из связанных файлов JSON и сохранить данные для нескольких сборок. Однако, когда я создаю свой собственный объект и сохраняю его, сущность исчезает сразу после следующей сборки, если я использую [RKManagedObjectStore defaultStore] .mainQueueManagedObjectContext, но сохраняется правильно, если я использую [RKManagedObjectStore defaultStore] .persistentStoreManagedObjectContext.Объекты, сохраненные в mainQueueManagedObjectContext RKManagedObjectStore, исчезают при следующей сборке

UserAccount *userAccount = [NSEntityDescription insertNewObjectForEntityForName:entityName inManagedObjectContext:managedObjectContext]; 
    userAccount.userID = @(userID); 
    [userAccount addContactMethodsObject:phone]; 
    NSError *error = nil; 
    if(![managedObjectContext save:&error]) 
     NSLog(@"%@", error); 

Использование либо managedObjectContext сохраняет без ошибок в коде выше, и любой Fetches из того же контекста возвращает объект должным образом. Но после последующих сборок, выборки всегда будут возвращать нуль, если я буду использовать mainQueueManagedObjectContext, даже несмотря на то, что приведенный выше код запускается в основном потоке.

Есть ли что-нибудь, что мне не хватает?

ответ

9

Когда вы используете save: в контексте, созданном с использованием mainQueueManagedObjectContext, он не будет сохранять свои изменения в хранилище. В соответствии с документацией для RKManagedObjectStore (жирный шрифт) шахты:

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

Если вы хотите, чтобы сохраняться изменения и по-прежнему использовать контекст mainQueueManagedObject, попробуйте использовать

- (BOOL)saveToPersistentStore:(NSError **)error 

Это будет удар изменения вверх по иерархии контекста.

Соответствующая документация для RKManagedObjectStore можно найти на http://restkit.org/api/latest/Classes/RKManagedObjectStore.html#//api/name/persistentStoreManagedObjectContext

Документация по категории restkit в NSManagedObject можно найти на http://restkit.org/api/0.20.0-pre3/Categories/NSManagedObjectContext+RKAdditions.html

+1

Спасибо! Это очень помогло мне. Я потратил 6 часов, чтобы понять это. – Flaviu

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