发布于 2012-06-22 17:13:49
注意:当我在2012年写这篇文章的时候,这个API是最前沿的,细节也发生了变化。如果你愿意的话,可以随时更新。不幸的是,我目前没有从事任何可可/ObjC项目,所以我不是一个保持这一现状的好人。看来总的要旨是正确的。
核心数据提供了一组帮助管理对象持久性的工具,即从某种存储中保存并取回对象集(NSManagedObject)的能力。
当您使用Core对象时,可以使用从NSManagedObjectContext获得的NSPersistentStoreCoordinator。PSC依次与一个或多个NSPersistentStore子类进行对话,这些子类处理存储上的实际操作。(考虑创建/读取/更新/删除数据库)。
核心数据支持两种主要的存储:NSPersistentStore和NSAtomicStore。持久化存储可以看作是数据库:您可以增量地保存、更新和从数据库中获取任意的记录集。原子存储是对象图的“全部或无”表示。它旨在成为结构化文件在内存中的表示形式.
Core数据附带的存储类型如下:
NSSQLLiteStoreType (NSPersistentStore)NSInMemoryStoreType (NSPersistentStore)NSXMLStoreType (NSAtomicStore)NSBinaryStoreType (NSAtomicStore)NSPersistentStore被明确禁止被子类化,因此到目前为止,还没有办法创建您自己的非原子存储后端。也就是说,如果您希望持久化并以零碎的方式查询对象的表示形式,而不是在一个大块(“加载整个图”、“保存整个图”)中,您就运气不佳了。直到iOS5引入NSIncrementalStore。
NSIncrementalStore是一个抽象类(继承自NSPersistentStore),您实现该类的方法是在您控制的数据存储区和核心数据世界之间提供适配器。您可以使用它来包装远程API,或者如果您非常倾向于包装类似于NULevelDB或NanoStore的东西(尽管我不知道为什么要这样做)。
发布于 2012-05-06 10:23:38
您可以使用NSIncrementalStore通过Core访问远程服务器。您不需要从本地文件中读取和写入本地文件,而是将请求推送到服务器并得到响应,然后将其推入Core数据中。为拯救等而同样
不过,请注意,这并不是一件小事.这是一个非常强大的特性,但除非您是核心数据使用方面的专家,否则我强烈反对它,因为除非您了解Core数据与存储层的交互是如何工作的,否则就有无数的机会可以自投罗网。
如果使用uploaded解决了您的问题,那么可以这样做。
发布于 2012-05-05 09:22:13
简而言之,如果您在核心数据中使用SQLite存储,那么您已经在使用增量存储。增量存储的所有好处(主要是不必将整个存储加载到内存中)已经可以供您使用了。
至于NSIncrementalStore API的具体应用,我建议您首先确切地定义要解决的问题。如果需要此API,则取决于编程任务的特定需求。
响应问题编辑的编辑
我只需要这样做:在设备上的核心数据实体中,可以有一个属性BOOL uploaded。当web服务可用时,启动上传,并提取所有尚未uploaded的对象。
要上传,可以将对象转换为NSArray和NSDictionary,可能转换为JSON格式和POST到您的网站。当网站响应保存数据时,将所有对象标记为uploaded。
https://stackoverflow.com/questions/10459635
复制相似问题