使用 RestKit 0.2 从 CoreData 获取本地数据

Posted

技术标签:

【中文标题】使用 RestKit 0.2 从 CoreData 获取本地数据【英文标题】:Fetch Local Data from CoreData using RestKit 0.2 【发布时间】:2013-05-31 07:10:51 【问题描述】:

我在从 RestKit 世界中的 CoreData 获取数据时遇到了一些问题。我能够成功地将 JSON 数据从服务器映射到我的 NSManagedObject 实体。但我不知道如何获取 RestKit 存储在本地存储中的数据。

我尝试使用下面的代码从本地存储中获取数据:

NSManagedObjectContext* context = [RKManagedObjectStore defaultStore].mainQueueManagedObjectContext;
//  NSManagedObjectContext* context =  [[[RKObjectManager sharedManager] managedObjectStore] mainQueueManagedObjectContext];
  NSError *error = nil;
  NSEntityDescription *entityDescription = [NSEntityDescription
                                            entityForName:@"DTUser" inManagedObjectContext: context];
  NSFetchRequest *request = [[NSFetchRequest alloc] init];
  [request setEntity:entityDescription];
  NSArray *dtContents = [context executeFetchRequest:request error:&error];
  NSLog(@"Content :%@", dtContents);

但它返回一个空数组。

【问题讨论】:

应该加载什么以及何时运行该代码?你设置了defaultStore吗? @Wain :是的,我已经设置了默认存储。我能够正确地将 JSON 数据映射到我的核心数据实体。当我做 int count = [context countForEntityForName:@"MyEntity" predicate:nil error:nil];它给了我正确的实体计数。但是一旦我关闭(终止)应用程序并再次打开应用程序并再次执行以下代码: int count = [context countForEntityForName:@"MyEntity" predicate:nil error:nil];它返回计数为零。 你已经调试检查你有一个有效的上下文,你已经检查了获取请求错误?您是如何创建 Core Data 堆栈的? 是的,它正在返回有效的上下文。我什至尝试过 BOOL success = [context saveToPersistentStore:nil];然后数据也没有保存在数据库中。 所以可能我们需要看看模型/存储/上下文是如何创建的 【参考方案1】:

使用addInMemoryPersistentStore: 不会保存到磁盘,因此当应用关闭时所有数据都消失了。看看改用addSQLitePersistentStoreAtPath:

【讨论】:

非常感谢您的回复。

以上是关于使用 RestKit 0.2 从 CoreData 获取本地数据的主要内容,如果未能解决你的问题,请参考以下文章

“找不到给定内容的任何映射,keyPath=null”RestKit 0.2

RestKit 0.2 映射 Core Data <--> JSON 与一对多关系

在 RestKit 中使用 RKObjectManager 从 CoreData 获取

RestKit + CoreData:从CoreData缓存中排除某些对象

CoreData & RestKit - 从多个来源获取相同的实体类型

FetchRequest 不返回通过 RestKit 0.2 获取的 NSManagedObjects