如何使用 Restkit 和 Core Data 存储对象和种子预加载数据
Posted
技术标签:
【中文标题】如何使用 Restkit 和 Core Data 存储对象和种子预加载数据【英文标题】:How to store objects and seed preloaded data using Restkit and Core Data 【发布时间】:2012-07-05 14:00:51 【问题描述】:我是一名新的 ios 开发人员,我正在制作一个使用来自 Restful Web 服务的信息的 iOS 应用程序。我能够从服务器获取数据,但有时数据需要一段时间才能加载。数据的某些方面不会一直变化(例如,商店出售的商品),但数据的某些方面每天都在变化(例如,某个商品的库存数量)。 我想将不会一直变化的数据存储到 iOS 内存中。根据我的研究,核心数据似乎是做到这一点的最佳方式。
如何将不会一直变化的对象数据存储到 iOS 的核心数据中,并让它在启动时加载该数据,然后在以后获取一直在变化的信息?
我进行了一些搜索,据我了解,我可以通过获取数据来利用 Core Data,然后将其存储到看起来像数据库的地方。然后我可以从 NSManagedObjects 中获取预加载的数据并在运行时显示它们。
这是正确的方法吗? 另外,如果数据发生变化(销售新商品),Restkit 会处理这个并将其存储到核心数据中,还是我需要设置它以注意到变化?
感谢您的帮助!
【问题讨论】:
【参考方案1】:使用 RestKit,您可以基于您的 CoreData 模型构建数据库,但您也可以使用预填充的数据库进行构建。
您的 objectManager 应该如下所示:
RKObjectManager* objectManager = [RKObjectManager managerWithBaseURLString:@"http://your-url.com"];
objectManager.objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:@"new-database.sqlite" usingSeedDatabaseName:nil managedObjectModel:nil delegate:self];
如果您想要一个预填充数据库的副本,或者像这样:
objectManager.objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:@"new-database.sqlite" usingSeedDatabaseName:@"last-database.sqlite" managedObjectModel:nil delegate:self];
您的 last-database.sqlite 必须像复制捆绑资源一样集成。
如果您不想刷新所有数据,此系统可以为您提供帮助。
【讨论】:
【参考方案2】:查看 RestKit 示例目录并打开 RKTwitterCoreData 项目。它向您展示了一个完全按照您描述的方式运行的系统。
【讨论】:
以上是关于如何使用 Restkit 和 Core Data 存储对象和种子预加载数据的主要内容,如果未能解决你的问题,请参考以下文章
带有 Core Data 陡峭学习曲线的 RestKit 0.10.1
如何将 PUT 请求添加到 RestKit + Core Data?