CoreData & RestKit - 从多个来源获取相同的实体类型

Posted

技术标签:

【中文标题】CoreData & RestKit - 从多个来源获取相同的实体类型【英文标题】:CoreData & RestKit - Fetching same entity type from multiple sources 【发布时间】:2013-12-05 08:27:09 【问题描述】:

我正在使用最新版本的 RestKit 访问 API,并且正在拉下一些“事件”对象。

我有两个不同的 API 端点: 1.“所有事件” 2.“该用户的事件”

来自端点 #2 的事件是来自端点 #1 的事件的子集。

目前,我创建了两个不同的 CoreData 实体,每个端点一个。这可行,但效率低下 - 子集中的那些事件存在重复。

我想做的是使用端点 #1 来下拉所有事件,然后使用端点 #2 标记与该用户相关的那些事件(来自端点 #1)。

是否可以使用 RKEntityMapping 将任意值(标志)映射到接收到的对象 - 因此我可以在用户事件到达时对其进行标记,但仍将它们作为事件的超集放入相同的 CoreData 实体中。

或者有什么其他建议?

【问题讨论】:

【参考方案1】:

事实上,您提出的唯一方法就是这样做。我不了解 RestKit,但您可以简单地首先获取用户的事件,插入 Core Data,然后获取所有事件并仅插入用户事件中未包含的事件。如果你有两个字典数组或托管对象,一个简单的谓词就可以了:

NSArray *userEventIDs = [userEvents valueForKeyPath:@"idNumber"];
NSSet *newEvents = [allEvents filteredSetUsingPredicate:
  [NSPredicate predicateWithFormat:@"not (idNumber in %@)", userEventIDs]];

【讨论】:

那么,我应该如何在收到用户事件时对其进行标记?如果没有这个,按照你的提议,我不会仍然会得到一整套所有事件,而无法识别与用户相关的事件。 您说您正在使用 Core Data。当然,您的对象模型将包括从用户到事件的一对多关系。对吗? 你当然是完全正确的!我想我只是被 RestKit 的明显简单性和模仿远程数据结构蒙蔽了双眼,而我应该自己在本地数据库(或 CoreData)中创建关系。感谢您的帮助。

以上是关于CoreData & RestKit - 从多个来源获取相同的实体类型的主要内容,如果未能解决你的问题,请参考以下文章

RestKit & RKDynamicMapping

RestKit 与直接 CoreData

RestKit 和 Coredata

RestKit + CoreData,理解 RKManagedObjectRequestOperation

无法使用 CoreData 配置 RestKit

RestKit + CoreData:从CoreData缓存中排除某些对象