Подтвердить что ты не робот

IOS RestKit не может сохранять локальный объект в базе данных

Я использую RestKit 0.20 для анализа данных JSON и сохранения в базе данных. Это сопоставленный объект SchoolClass, который обрабатывается RestKit и сохраняет все в порядке. У меня есть другой объект под названием MyClass, в котором хранятся выбранные мной классы. Он только локален на устройстве.

Вот код, который я создаю и сохраняю объект MyClass

 NSManagedObjectContext *managedObjCtx = [RKManagedObjectStore defaultStore].mainQueueManagedObjectContext;
 MyClass* course = [managedObjCtx insertNewObjectForEntityForName:@"MyClass"];

 .. set the data for course here

 NSError *executeError = nil;
 if(![managedObjCtx save:&executeError]) {
      NSLog(@"Failed to save to data store");
 }

Вот код, который инициализирует хранилище управляемых данных

  // Initialize managed object store
    NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
    RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];
    objectManager.managedObjectStore = managedObjectStore;

   /**
     Complete Core Data stack initialization
     */
    [managedObjectStore createPersistentStoreCoordinator];
    NSString *storePath = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"RKMainDb.sqlite"];
    NSString *seedPath = [[NSBundle mainBundle] pathForResource:@"RKSeedDatabase" ofType:@"sqlite"];
    NSError *error;
    NSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:storePath fromSeedDatabaseAtPath:seedPath withConfiguration:nil options:nil error:&error];
    NSAssert(persistentStore, @"Failed to add persistent store with error: %@", error);

    // Create the managed object contexts
    [managedObjectStore createManagedObjectContexts];

    // Configure a managed object cache to ensure we do not create duplicate objects
    managedObjectStore.managedObjectCache = [[RKInMemoryManagedObjectCache alloc] initWithManagedObjectContext:managedObjectStore.persistentStoreManagedObjectContext];

Кажется, сохранение выполнено успешно, и в MyClasseTableViewController я могу прочитать сохраненные записи MyClass. Однако после закрытия приложения и повторного запуска. MyClassTableViewController пуст, потому что полученные результаты пустые. Я открыл файл sqlite с помощью SQLiteBrowser, а таблица MyClass пуста. Похоже, что объекты MyClass сохраняются только в кеше, но не в постоянном хранилище. Мне нужно вызвать некоторый API, предоставленный RestKit, чтобы сохранить его? Я попытался прочитать документ, но не смог его найти. Пожалуйста, помогите.

4b9b3361

Ответ 1

Спасибо за лидерство Тома, я обнаружил, что RestKit имеет NSManagedObjectContext (RKAdditions), который имеет метод:

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

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

#import "NSManagedObjectContext+RKAdditions.h"
     NSManagedObjectContext *managedObjCtx = [RKManagedObjectStore defaultStore].mainQueueManagedObjectContext;
     MyClass* course = [managedObjCtx insertNewObjectForEntityForName:@"MyClass"];

     .. set the data for course here

     NSError *executeError = nil;
     if(![managedObjCtx saveToPersistentStore:&executeError]) {
          NSLog(@"Failed to save to data store");
     }