将Web服务数据缓存到核心数据中的好方法是什么。主要目的是在设备联机时将Web服务数据同步到核心数据中,或者发生一些更新,用户也可以离线获取数据那么这个东西将如何实施任何好的建议。
答案 0 :(得分:2)
我做到了这一点。我的过程是使用网络客户端(在我的情况下,AFNetworking),然后在成功请求后,我会执行以下操作:
从Core Data Entity中删除所有对象
在AppDelegate中创建一个NSOperationQueue并使用一个自定义Parser类来实例化在后台线程上使用的新ManagedObjectContext
解析来自Web服务的响应,并使用
将对象插回到后台线程上的CD实体中// Register context with the notification center
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self
selector:@selector(mergeChanges:)
name:NSManagedObjectContextDidSaveNotification
object:ctx];
然后当我保存托管对象时(我每隔五次传递一次保存),通知将被发送并且此方法将被触发:
- (void)mergeChanges:(NSNotification *)notification
{
id appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *mainContext = [appDelegate managedObjectContext];
// Merge changes into the main context on the main thread
[mainContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:)
withObject:notification
waitUntilDone:NO];
}
这将主要在后台更新核心数据实体,然后合并主线程中的更改(每五个“记录”)。我的用户初始UI是一个依赖于核心数据实体更新的TableView,并且更新足够快,用户可以在新数据进入时使用tableview(FetchedResultsController将管理新的插入)电视中的行。)
如果需要,我可以发送更多代码,但它的要点是使用NSOperationQueue在后台线程上解析创建的托管对象,然后每隔一段时间(在我的情况下为5条记录)将更改合并到上下文中主线程的MOC。
答案 1 :(得分:1)
尝试使用RestKit:http://restkit.org/
RestKit的主要目标是让开发人员更多地考虑 他们的应用程序的数据模型的条款和担心较少 发送请求,解析响应和构建的详细信息 远程资源的表示。