在过去的几个小时里,我通过查看 StackOverFlow 线程上已解决的类似问题,尝试了许多不同的解决方案来解决此问题。
但是,我遇到了困难。
一些背景。
使用Restkit 0.22和Core Data来持久化2个对象并建立它们之间的关系。 我正在建模的两个对象如下,关系也以 COAgendaItem 和 COMapItemLocation 之间的一对一关系(目前不起作用的关系)以及 COMapItemLocation 和 COAgendaItem 之间的一对多关系(我还没看过这个映射):
-- COAgendaItem
--COMapItemLocation
它们具有相应的属性和关系
期望的结果是让核心数据关系与 RestKit 一起工作,即通过 COAgendaItem 对象上的代码访问属性议程项目位置。
来自服务器的 JSON 响应如下所示
上面的 JSON 响应是 COAgendaItem 对象所需的数据加上 COMapItemLocation 对象的主键。我在映射作为 COMapItemLocation 主键的 location_id 字段时遇到问题。 (我设置了响应描述符和检索代码,并且它工作正常,自从我尝试映射关系后,它才成为一个问题)
到目前为止,我已经修改了 RKEntityMapping 来尝试映射关系。
+ (RKMapping *)agendaItemMapping{
RKEntityMapping *agendaItemMapping = [RKEntityMapping mappingForEntityForName:@"COAgendaItem" inManagedObjectStore:[[COPersistenceCoordinator sharedCOPersistenceCoordinator]restKitObjectStore]];
[agendaItemMapping addAttributeMappingsFromDictionary:@{@"id": @"agendaItemID",@"title": @"agendaItemTitle",@"description": @"agendaItemDescription",@"start": @"agendaItemStartTime",@"end": @"agendaItemEndTime",@"category": @"agendaItemCategory",@"location_id" : @"agendaItemLocation"}];
[agendaItemMapping addConnectionForRelationship:@"agendaItemLocation" connectedBy:@"location_id"];
return agendaItemMapping;
}
但是,这会导致启动时崩溃,如下所示(注意,我还在默认映射中为外键添加了 @"location_id": @"agendaItemLocation"映射,这是必要的吗)
我尝试修改[agendaItemMapping addConnectionForRelationship:@“agendaItemLocation”connectedBy:@“location_id”];
我能想到的所有组合的语句都采用单字符串和字典格式,即 @{"agendaItemLocation": @"location_id"} 但无论我尝试什么,它总是会出现与之前相同的错误“无法连接关系:无效属性”为源实体“COAgendaItem”给出:location_id'。
我完全被这个问题难住了,谁能指出我做错了什么或需要采取不同的做法吗?
非常感谢您提前提供的任何帮助! :)
最佳答案
您描述了 2 种不同的关系,但实际上您只有一种是相反的。这是正确的,只是你的描述是错误的(因此可能是你对设置关系内容的理解)。
无法建立连接(并且你得到一个错误),因为 RestKit 需要知道要查找(连接到)的另一个对象的 ID。您告诉它使用 location_id
,但它需要是类的一个属性(通常是 transient 的),而不是 JSON 中的一个项目(因为连接是在处理 JSON 之后建立的,并且走了)。
向实体添加一个属性,并添加一个映射以将 location_id
放入其中。使用该属性的名称更新连接。
关于ios - Restkit - 通过外键进行核心数据一对一关系映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21731312/