基本上,当外键变为空时(在它被设置为一个值之后),核心数据中的关系不会被重置。
以如下一对多关系为例: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