将Web Service数据缓存到核心数据中

时间:2012-04-26 07:46:25

标签: iphone ios web-services core-data

将Web服务数据缓存到核心数据中的好方法是什么。主要目的是在设备联机时将Web服务数据同步到核心数据中,或者发生一些更新,用户也可以离线获取数据那么这个东西将如何实施任何好的建议。

2 个答案:

答案 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的主要目标是让开发人员更多地考虑   他们的应用程序的数据模型的条款和担心较少   发送请求,解析响应和构建的详细信息   远程资源的表示。