ios - Restkit - 通过外键进行核心数据一对一关系映射

标签 ios core-data restkit foreign-key-relationship

在过去的几个小时里,我通过查看 StackOverFlow 线程上已解决的类似问题,尝试了许多不同的解决方案来解决此问题。

但是,我遇到了困难。

一些背景。

使用Restkit 0.22和Core Data来持久化2个对象并建立它们之间的关系。 我正在建模的两个对象如下,关系也以 COAgendaItem 和 COMapItemLocation 之间的一对一关系(目前不起作用的关系)以及 COMapItemLocation 和 COAgendaItem 之间的一对多关系(我还没看过这个映射):

-- COAgendaItem

enter image description here

--COMapItemLocation

enter image description here

它们具有相应的属性和关系 enter image description here

期望的结果是让核心数据关系与 RestKit 一起工作,即通过 COAgendaItem 对象上的代码访问属性议程项目位置。

来自服务器的 JSON 响应如下所示

enter image description here

上面的 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"映射,这是必要的吗)

enter image description here

我尝试修改[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/

相关文章:

ios - Xamarin:UICollection 图像重新排序问题

ios - 任何人都可以提供指向有效的 RestKit 0.20 教程的链接吗

restkit 中的 ios NSDateFormatter

ios - 对许多实体和实体关系进行过滤的核心数据提取

ios - 是否可以同时与 CoreData 中的两个不同实体进行交互?

ios - CoreData 对象到 Swift 3 中的 JSON

ios - 将 ISO6801 日期转换为 NSDate 以进行 RestKit 对象映射

iOS:使用另一个类中定义的 UITableViewCell 中按钮的选定状态填充数组

iphone - Xcode addSubview 具有唯一名称

ios - 如何将 YUVJ420P 中的 FFMPEG AVFrame 转换为 AVFoundation cVPixelBufferRef?