我花了最近几个小时通过查看已在StackOverFlow线程上解决的类似类似问题尝试了许多不同的解决方案。
然而,我碰到了一堵砖墙。
一些背景。
使用Restkit 0.22和核心数据来保留2个对象并在它们之间建立关系。 我正在建模的两个对象如下,关系也包含在COAgendaItem和COMapItemLocation(目前无法正常工作的关系)和COMapItemLocation与COAgendaItem之间的One-Many之间的One-One关系形式(I还没有考虑这个映射):
- COAgendaItem
- COMapItemLocation
他们有相应的属性和关系
期望的结果是使核心数据关系与RestKit一起工作,即可以通过COAgendaItem对象上的代码访问属性agendaItemLocation。
服务器的JSON响应如下所示
上面的JSON Response是COAgendaItem对象加上COMapItemLocation对象的主键所需的数据。我在映射location_id字段时遇到问题,该字段是COMapItemLocation的主键。 (我已经设置了响应描述符和检索代码,并且它正常工作,因为我试图映射关系,它只会成为一个问题)
到目前为止,我已经修改了我的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'。
我完全被这个问题困扰,任何人都可以指出我做错了或需要采取不同的做法吗?
非常感谢您提前提供的任何帮助! :)
答案 0 :(得分:1)
你描述了两种不同的关系,但实际上你只有一种反转关系。这是正确的,只是你的描述是错误的(因此可能是你对设置关系内容的理解)。
无法建立连接(并且您收到错误),因为RestKit需要知道要查找的其他对象的ID(连接到)。你告诉它使用location_id
,但它需要是类的属性(通常是瞬态),而不是JSON中的项(因为连接是在JSON处理完毕后进行的)。
向实体添加属性以及将location_id
放入其中的映射。使用该属性的名称更新连接。