繁体   English   中英

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

[英]Restkit - Core Data One-To-One Relationship Mapping via Foreign Key

我花了最后几个小时,通过查看StackOverFlow线程上已解决的类似问题,尝试了多种解决方案。

但是,我碰到了砖墙。

一些背景。

使用Restkit 0.22和Core Data持久化2个对象并在它们之间建立关系。 我正在建模的两个对象如下所示,还包括以下形式的关系:COAgendaItem和COMapItemLocation之间的一对一关系(当前不起作用)和COMapItemLocation和COAgendaItem之间的一对多(I尚未查看映射):

-COAgendaItem

在此处输入图片说明

-COMapItemLocation

在此处输入图片说明

它们具有对应的属性和关系 在此处输入图片说明

理想的结果是使核心数据关系与RestKit一起工作,即,可以通过COAgendaItem对象上的代码访问属性scheduleItemLocation。

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

在此处输入图片说明

上面的JSON响应是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'。

我对此完全感到困惑,有人能指出我做错了或需要做不同的事情吗?

非常感谢您提前提供的帮助! :)

您描述了2种不同的关系,但实际上您只是拥有一种逆关系。 这是正确的,只是您的描述是错误的(因此可能是您对设置关系内容的理解)。

无法建立连接(您会收到错误),因为RestKit需要知道要查找(连接)的另一个对象的ID。 您要告诉它使用location_id ,但是它必须是类的一个属性(通常是瞬时的),而不是JSON中的一项(因为在处理和删除JSON之后才进行连接)。

将属性添加到实体和映射以将location_id放入其中。 使用该属性的名称更新连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM