尝试通过单个响应连接来 self 的 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
实体都被重新映射,关系按预期连接,并且我的提取请求表现符合预期。
我真的不知道为什么这种关系在初始加载时无效。我不知道这是核心数据配置问题还是 RestKit 问题,但这让我发疯了,我希望能得到任何额外的见解。如有必要,很高兴提供更多信息。
编辑
这与建议的副本不同,因为这是一对一
关系,因此使用RKAssignmentPolicyUnion
的建议答案不适用。
更新
这是我正在为我正在收听的 Controller 使用的获取请求:
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 对象,但 Controller 未触发任何更新并且我的表保持为空,直到我下次运行该应用程序。
最佳答案
K,另一个经典案例“你做错了,你正在寻找所有错误的地方来修复它。”
我在我的 Message
实体的实现中覆盖了 didChangeValueForKey:
方法来监视一些 transient ,而忽略了调用 [super didChangeValueForKey:key]
,这使映射中的反向连接赋值变得困惑。 Core Data 或 RestKit 绝对没有问题。只是我粗心。
关于ios - RestKit:初始映射后反向关系为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24091986/