如何使用 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?

与 Core Data 和 RestKit 无关的关系

Core Data 和 Restkit 简单轻量级迁移错误

Restkit/Core Data 关系映射,实体到相同类型的实体(父/子)

RestKit 到 Core Data 的映射和加载零对象。 RKManagedObjectLoader