【发布时间】:2014-07-28 07:45:36
【问题描述】:
尝试通过单个响应连接我的 API 中的两个实体。
{
"id": 4546,
"body": "Direct message",
"status": "received",
"from": {
"id": 723,
"signature": "Mr. Whatever"
},
"sent_at": "2014-06-05T21:33:15Z",
"sent_to": ...
}
对象是Message 实体,from 字段是嵌套的Sender 实体。下面是相关的关系映射:
RKEntityMapping *senderMapping = [RKEntityMapping mappingForEntityForName:@"Sender"
inManagedObjectStore:[AMModelManager sharedManager].managedObjectStore];
senderMapping.identificationAttributes = @[ @"remoteId" ];
[senderMapping addAttributeMappingsFromDictionary:@{
@"id" : @"remoteId",
@"signature" : @"signature"
}];
[messageMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"from"
toKeyPath:@"sender"
withMapping:senderMapping]];
第一次映射对象时,没有建立关系。我看到它在日志中被映射,但是当我打印任何特定的 Sender 对象时,它的 messages 反向关系显示一个空数组而不是关系错误。
Mapped relationship object from keyPath 'from' to 'sender'. Value: <Sender: 0x16a10990> (entity: Sender; id: 0x16a14580 <x-coredata:///Sender/t16539BDF-5606-442B-9EE2-D88363FB04AD29> ; data: {
messages = (
);
remoteId = 723;
signature = "Mr. Whatever";
})
当我想搜索来自给定发件人的所有消息时,这会使我在应用程序中的获取请求失败。
下次我运行应用程序并再次进行映射时,所有Message 和Sender 实体都被重新映射,关系按预期连接,我的提取请求按预期运行。
我真的不知道为什么这种关系在初始加载时无效。我不知道这是 Core Data 配置问题还是 RestKit 问题,但这让我抓狂,我希望能获得任何额外的见解。如有必要,很高兴提供更多信息。
编辑
这与建议的副本不同,因为这是to-one 关系,因此使用RKAssignmentPolicyUnion 的建议答案不适用。
更新
这是我正在为我正在收听的控制器使用的获取请求:
NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:@"Sender"];
fetch.predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(SELF.messages, $message, $message.direct == %@).@count > 0 && SELF.remoteId != %@", @(YES), user.remoteId];
fetch.sortDescriptors = @[
[NSSortDescriptor sortDescriptorWithKey:@"signature" ascending:YES selector:@selector(caseInsensitiveCompare:)]
];
在语义上,我想说“给我所有直接向当前用户发送消息的发件人,以及不是当前用户的发件人,按他们的签名排序。”
此获取请求会获取我在检索数据后运行它时所期望的 Sender 对象,但控制器不会触发更新,并且我的表保持为空,直到我下次运行应用程序。
【问题讨论】:
-
你有没有安排好关系?
-
我没有。多对多
Sender<->>Message的“有序”复选框未选中。你能解释一下这会如何影响吗? -
有一些关于有序集的错误,只是想知道这是否可能是一个潜在的原因。 JSON 是否包含同一项目的多个副本(一个包含嵌套内容,一个没有嵌套内容)?我之前没有看到你的问题,所以我只是想考虑潜在的原因......
-
所有
MessageJSON 对象都将包含一个Sender对象,其中许多将是相同的Sender,是的。绝不应该存在没有from字段的Message对象。
标签: ios core-data restkit one-to-many entity-relationship