用简单英语解释NSIncrementalStore

时间:2012-05-05 06:53:50

标签: ios web-services cocoa-touch core-data ios5

我一直在看NSIncrementalStore突然出现,因为我一直在研究使用核心数据与网络服务互动的最佳方式。

在阅读an article by Drew Crawforda programming guidea class reference and this tutorial后,我几次仍在努力了解NSIncremental商店是什么,为什么以及何时你会用它。

有人可以解释一下吗?

修改
在阅读了mundi的答案后,我可以看到一些需要进一步的背景。我正在研究将核心数据与我正在构建的Web服务结合使用。我试图找到在设备本地存储用户信息的最佳方法,并在有连接时发布到Web服务。我缺乏对核心数据的了解促使我进行了研究,但我无法完全理解NSIncrementalStore的有用性。

3 个答案:

答案 0 :(得分:34)

注意:当我在2012年写这篇文章并且细节已经改变时,这个API是最前沿的。如果您愿意,请随时更新。我目前没有参与任何Cocoa / ObjC项目,所以不幸的是,我不是一个保持最新状态的好人。似乎整体要点是正确的。

Core Data提供了一组有助于管理对象持久性的工具,即能够从某种存储中保存然后获取对象集(NSManagedObject)。

使用Core Data对象时,可以使用NSManagedObjectContext来获取NSPersistentStoreCoordinator。 PSC反过来与一个或多个NSPersistentStore子类进行对话,这些子类处理商店的实际操作。 (想想对数据库的创建/读取/更新/删除。)

Core Data支持两种主要类型的商店:NSPersistentStoreNSAtomicStore。持久性存储可以被认为是一个数据库:您可以从中逐步保存,更新和获取任意记录集。原子库是对象图的“全部或全部”表示。它旨在成为结构化文件的内存表示。

Core Data附带的商店类型是:

  • NSSQLLiteStoreTypeNSPersistentStore
  • NSInMemoryStoreTypeNSPersistentStore
  • NSXMLStoreTypeNSAtomicStore
  • NSBinaryStoreTypeNSAtomicStore
明确禁止

NSPersistentStore进行子类化,所以直到现在,还没有办法创建自己的非原子存储后端。也就是说,如果你想要持久地查询你的对象的表示而不是一个大块(“加载整个图形”,“保存整个图形”),你就不幸了。直到iOS5引入NSIncrementalStore

NSIncrementalStore是一个抽象类(来自NSPersistentStore),它实现的方法是在您控制的数据存储和Core Data世界之间提供适配器。您可以使用它来包装远程API,或者如果您如此倾向,可以包装NULevelDBNanoStore之类的内容(虽然我不确定您为什么这样做)。

答案 1 :(得分:9)

您可以使用NSIncrementalStore通过Core Data访问远程服务器。您不必读取和写入本地文件,而是将请求推送到服务器并获得回复,然后将其推送到Core Data。同样用于保存等

但请注意,这不是一件容易的事。这是一个非常强大的功能,但除非你是核心数据使用方面的专家,否则我会强烈反对它,因为除非你对Core Data与存储层的交互方式有很多了解,否则有很多机会自己动手。的工作原理。

如果使用uploaded解决了您的问题,请改为执行此操作。

答案 2 :(得分:5)

简而言之,如果您将SQLite存储与Core Data一起使用,那么您已经在使用增量存储。增量存储的所有好处(即主要不必将整个存储加载到内存中)已经可供您使用。

至于NSIncrementalStore API的具体应用,我建议您首先确定要解决的问题。如果您需要此API,则将由您的编程任务的特定需求决定。


编辑以回复问题编辑

我会这样做:在设备上的Core Data实体中,您可以拥有属性BOOL uploaded。当Web服务可用时,启动上载并提取所有不是uploaded的对象。

要上传,请将您的对象转换为NSArrayNSDictionary,或者转换为JSON格式并将POST转换为您的网站。当网站响应它保存数据时,将所有对象标记为uploaded