NSIncrementalStore以普通英语解释
我一直在看NSIncrementalStore
,因为我一直在研究使用核心数据与Web服务进行交互的最佳方式。
在阅读了Drew Crawford的一篇文章之后, 一个编程指南 , 一个类的引用 和本教程几次,我仍然在努力理解NSIncremental
存储的是什么,为什么以及何时使用它。
有人可以解释吗?
编辑
读完mundi的回答后,我可以看到一些进一步的背景是必需的。 我正在研究与正在构build的Web服务一起使用核心数据。 我试图find最好的方式来将用户信息存储在本地设备上,并在存在连接时发布到Web服务。 我对核心数据知识的缺乏促使了我的研究,但我无法完全理解NSIncrementalStore
的用处。
注意:当我在2012年写这个API时,这个API是stream血的,并且细节已经改变了。 如果您愿意,请随时更新。 我目前没有在任何Cocoa / ObjC项目上工作,所以我不是一个很好的人保持这个最新的,不幸的是。 这似乎是总体的要点是正确的。
核心数据提供了一组工具来帮助pipe理对象的持久性,也就是保存并从某种存储中取回对象集( NSManagedObject
)的能力。
在使用Core Data对象时,可以使用从NSPersistentStoreCoordinator
获得的NSPersistentStoreCoordinator
。 PSC依次与一个或多个NSPersistentStore
子类进行通信,这些子类处理商店上的实际操作。 (认为创build/读取/更新/删除数据库。)
核心数据支持两种主要的存储: NSPersistentStore
和NSAtomicStore
。 持久存储可以被认为是一个数据库:您可以逐步保存,更新和从中获取任意logging集。 primefaces存储是对象图的“全或无”表示。 它旨在成为一个结构化文件的内存表示。
Core Data自带的商店types是:
-
NSSQLLiteStoreType
(NSPersistentStore
) -
NSInMemoryStoreType
(NSPersistentStore
) -
NSXMLStoreType
(NSAtomicStore
) -
NSBinaryStoreType
(NSAtomicStore
)
NSPersistentStore
被明确禁止被子类化,所以直到现在,还没有办法创build自己的非primefaces存储后端。 也就是说,如果你想坚持不懈地查询你的对象的表示,而不是在一个大块(“加载整个图”,“保存整个图”),你运气不好。 直到iOS5引入NSIncrementalStore
。
NSIncrementalStore
是一个抽象类(来自NSPersistentStore
),它的实现方法是在您控制的数据存储和核心数据的世界之间提供适配器。 你可以用它来包装一个远程API,或者如果你这么倾向于你可以包装NULevelDB或NanoStore (虽然我不知道你为什么这样做)。
您可以使用NSIncrementalStore
通过Core Data访问远程服务器。 不要读取和写入本地文件,而是将请求推送到服务器,并获得一个您将要写入Core Data的响应。 同样为了保存等等
但是请注意,这是不重要的。 这是一个非常强大的function,但是除非你是核心数据使用方面的专家,否则我会强烈反对,因为除非你知道Core Data如何与存储层交互作品。
如果使用uploaded
解决了您的问题,那么做。
简而言之,如果您在核心数据中使用SQLite存储,则您已经在使用增量存储。 增量商店的所有好处(即,主要不必将整个商店加载到内存中)已经在您的处置中。
至于NSIncrementalStore
API的具体应用,我build议你首先定义你想要解决的问题。 如果你需要这个API或者不是由你的编程任务的特定需求决定的。
编辑回应问题编辑
我只是这样做:在设备上的核心数据实体,你可以有一个BOOL uploaded
属性BOOL uploaded
。 当Web服务变得可用时,开始上传并且拉取所有尚未uploaded
的对象。
要上传,请将您的对象转换为NSArray
和NSDictionary
,也许将其转换为JSON格式并POST
到您的网站。 当网站回应保存数据时,将所有对象标记为已uploaded
。