iOS RestKit无法将本地实体保存到数据库
我正在使用RestKit 0.20来parsingJSON数据并保存到数据库。 这是一个映射实体SchoolClass,由RestKit处理,并保存罚款。 我有另一个名为MyClass的实体,它存储我select的类。 这个只在设备上是本地的。
这里是我创build并保存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"); }
这是初始化托pipe数据存储的代码
// 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条目。 但是,我closures了应用程序,然后重新启动。 MyClassTableViewController是空的,因为提取的结果是空的。 我打开SQLite文件使用SQLiteBrowser和MyClass表是空的。 看起来像MyClass实体只保存在caching中,但不保存在持久性存储中。 我是否需要调用RestKit提供的一些API来保存它? 我试图读通过文件,但无法find它。 请帮忙。
谢谢Tom的带领,我发现RestKit有NSManagedObjectContext(RKAdditions),它有一个方法:
- (BOOL)saveToPersistentStore:(NSError **)error
是的,它确实有处理嵌套pipe理对象上下文的逻辑。 这是新的代码工作,只是一个线路的变化,但花了很多时间来find正确的电话:(
#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"); }
- 如何在使用CoreData时与Watch OS 2共享数据以显示在WKInterfaceTable中
- 如何使用可查询数组属性创build核心数据条目?
- 核心数据 – 使用Group By的瞬态属性
- 将核心数据快速地检索到tableview单元格中
- Swift:通过sorting描述符sorting数组
- 核心数据和自反实体关系(一对一或多对多)
- 如何引用Today View Widget中的AppDelegate?
- + entityForName:nil不是合法的NSManagedObjectContext参数search实体名称“帐户”
- Swift CoreData:错误:严重的应用程序错误。 核心数据更改处理期间发生exception。