0

基本上,当外键变为空时(在它被设置为一个值之后),核心数据中的关系不会被重置。

以如下一对多关系为例:contact <<---> company(联系人有一个公司,公司有很多联系人)

使用 Restkit 中的以下方法在两个方向上映射:

RKRelationshipMapping *contactCustomerRelationshipMapping = [RKRelationshipMapping relationshipMappingFromKeyPath:@"contacts" toKeyPath:@"hasContacts" withMapping:contactResponseMapping];
[customerResponseMapping addPropertyMapping:contactCustomerRelationshipMapping];
[contactResponseMapping addConnectionForRelationship:@"forCustomer" connectedBy:@{@"companyID" : @"identifier"}];

然后,假设联系人在核心数据和远程服务器中都链接到公司,因此 JSON 返回:company_id = 123,它正确映射到核心数据中的关系。

尽管当关系为空时,返回的 JSON 响应 GET 联系人返回:

'contact': {
....
address = "20 Wordworth Ave";
city = "<null>";
"company_id" = "<null>";
...
}

company_id 然后在核心数据实体中正确设置,但关系连接映射器不会通过关系删除对 ID 为 123 的公司的引用。所以看起来 Restkit 没有将外键的空值应用于 Core Data 中的关系。

我已经验证只有当 company_id 重置为 null 而不是将值更改为另一个 company_id 时才会发生这种情况。

如果您对如何解决该问题有任何建议,请告诉我。(现在我正在考虑实现 company_id 的设置器并在它为空时手动重置关系)

非常感谢!


我正在使用最新的 Restkit 开发分支(标记为 0.21.0 - 目前最新版本是 0.20.3 但 blake watters 告诉我开发分支已被标记但他没有时间准备文档)我我实际上正在使用 cocoapods 并包含最新的开发版本: pod 'RestKit', :head

4

1 回答 1

1

您的解决方法应该是可行的。

这可以归类为 RestKit 中的错误。因此,您最好将其作为一个问题提出。您还可以考虑将其添加为功能。

您可以使用fetchRequestBlocks为 RestKit 提供处理此问题所需的信息,但这会导致对象被删除,这可能不是您想要的。

于 2013-10-03T15:09:10.207 回答