Ver*_*non 8 iphone web-services core-data cocoa-design-patterns
我正在尝试为使用外部数据源的iPhone编写Core Data应用程序.我并不是真的使用Core Data来保存我的对象,而是使用对象生命周期管理.我对如何将Core Data用于本地数据有一个很好的想法,但是遇到了一些远程数据问题.我将以Flickr的API为例.
首先,如果我需要说明最近的照片列表,我需要从外部数据源中获取它们.在我检索完列表之后,似乎我应该迭代并为每张照片创建托管对象.此时,我可以继续使用我的代码并使用标准的Core Data API来设置获取请求并检索有关狗的照片子集.
但是如果我想继续并检索用户照片列表怎么办?由于这两个数据集可能相交,我是否必须对现有数据执行获取请求,更新已存在的数据,然后插入新对象?
-
在较旧的模式中,我只是为每个数据集分别拥有单独的数据结构并适当地访问它们.最近的照片集和用户照片集.但由于核心数据的一般模式似乎是使用一个托管对象上下文,似乎(我可能是错的)我必须将我的数据与主数据池合并.但这似乎只是为了获取一系列照片而需要大量开销.我应该为不同的集创建单独的托管对象上下文吗?核心数据应该在这里使用吗?
我认为我对Core Data的吸引力在于之前(对于Web服务)我会请求某些数据并在请求中过滤它或者在代码中过滤它并生成我将使用的列表.使用Core Data,我可以获取对象列表,将它们添加到我的池中(根据需要更新旧对象),然后查询它.然而,我可以通过这种方法看到的一个问题是,如果对象被外部删除,我无法知道,因为我保留了我的旧数据.
我离开基地吗?人们在处理远程数据和核心数据时是否有任何模式?:)我发现有一些人说他们已经完成了它,并且它适用于他们,但很少有例子.谢谢.
对于这种情况,您可以使用 Cocoa 的归档工具在会话之间将照片对象(和索引)保存到磁盘,并在每次应用程序调用 Flickr 时将其全部覆盖。
但既然您已经在使用 Core Data,并且喜欢它提供的功能,为什么不修改您的数据模型以包含“source”或“callType”属性呢?目前,您正在使用源“Flickr API”隐式创建一堆对象,但您可以轻松地将不同的 API 调用视为唯一源,然后显式存储它。
要处理删除,最简单的方法是在每次刷新数据存储时清除数据存储。否则,您需要迭代所有内容,仅删除文件名未包含在新结果中的照片对象。
我计划自己做类似的事情,所以我希望这会有所帮助。
PS:如果您根本不存储会话之间的照片对象,您可以仅使用两个不同的上下文并分别查询它们。只要它们从未被保存,并且中央存储中还没有任何内容,它就会像您所描述的那样工作。