iOS的RestKit无法保存本地实体数据库(iOS RestKit can not save lo

2019-08-17 23:05发布

我使用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是空的,因为所取得的结果是空的。 我打开使用SQLiteBrowser sqlite的文件和MyClass的表是空的。 貌似MyClass的实体仅保存在缓存中,但不是在持久性存储。 我需要调用由RestKit提供了一些API来保存呢? 我试图通过文档阅读,但无法找到它。 请帮忙。

Answer 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");
     }


文章来源: iOS RestKit can not save local entity to database