RestKit/CoreData 没有立即将关系保存到持久存储
Posted
技术标签:
【中文标题】RestKit/CoreData 没有立即将关系保存到持久存储【英文标题】:RestKit/CoreData not saving relationships immediately to the persistent store 【发布时间】:2013-12-27 15:24:46 【问题描述】:RestKit 或 CoreData 是否有一些奇怪的上下文保存机制?我的意思是我下载了我的托管对象,如果我快速终止应用程序并再次运行它,我会看到一些关系对象没有保存到持久存储中。但是,当我在杀死应用程序之前等待 10-15 秒时,这些对象会被保存,我可以在再次运行应用程序时获取它们。
那么它是如何工作的呢?对象没有保存在类似事务的操作中是否正常(无论是整个对象及其关系还是什么都没有)?
也许我只是幸运地度过了这 15 秒,并且由于 CoreData/RestKit/我的代码中的一些错误,这些关系对象可能在某些情况下根本不会被保存?
我使用以下方式下载对象:
RKObjectManager *manager = [RKObjectManager sharedManager];
[manager getObjectsAtPath:@"/" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult)
NSLog(@"OK");
[self saveContext];
failure:^(RKObjectRequestOperation *operation, NSError *error)
NSLog(@"ERROR");
];
并通过以下方式保存上下文:
[[RKManagedObjectStore defaultStore].mainQueueManagedObjectContext save:&err];
有什么帮助吗?
【问题讨论】:
你能在主队列中明确地执行保存操作吗?只是为了确定.. 保存时我正在检查 [[NSThread currentThread] isMainThread],它总是等于 YES。奇怪的是,主对象(订单)被保存了,而子对象(项目)却没有。 【参考方案1】:RestKit 在调用成功块之前为您保存上下文 - 您不需要显式保存。
通过“杀死应用程序”我猜你是在 Xcode 中停止它?这是一个完整的终止,任何尚未完成的事情都没有机会完成。这是不切实际的测试,你不应该太依赖它。
如果您想确切了解保存操作何时完成,请注意发布的相应通知。
【讨论】:
以上是关于RestKit/CoreData 没有立即将关系保存到持久存储的主要内容,如果未能解决你的问题,请参考以下文章
RestKit / Core Data / Offline - 我需要 UUID 还是 RestKit 足够聪明?
RestKit + CoreData,理解 RKManagedObjectRequestOperation
使用 CoreData 时 RestKit 没有正确映射属性