Foreign keys RestKit外键关系映射不工作
我有一个用户对象,它的属性如下IDS NSArray-可转换的核心数据类型,关系如下 然后在restkit中,我有以下连接描述 当我检查mappingResult对象时,设置了以下ID,但没有完成关系。http响应提供了一个包含两个用户对象的用户集合;跟随者和跟随者 lldb po[mappingResult.array firstObject]Foreign keys RestKit外键关系映射不工作,foreign-keys,mapping,restkit,Foreign Keys,Mapping,Restkit,我有一个用户对象,它的属性如下IDS NSArray-可转换的核心数据类型,关系如下 然后在restkit中,我有以下连接描述 当我检查mappingResult对象时,设置了以下ID,但没有完成关系。http响应提供了一个包含两个用户对象的用户集合;跟随者和跟随者 lldb po[mappingResult.array firstObject] <AOUser: 0x7feea8ea5940> (entity: AOUser; id: 0xd000000000040000 <
<AOUser: 0x7feea8ea5940> (entity: AOUser; id: 0xd000000000040000 <x-
coredata://E1732DA6-BAEB-4E6E-BC7D-F0944A2CD5B5/AOUser/p1> ; data: {
userId = 2;
follower = "<relationship fault: 0x7feeade18c80 'follower'>";
followingIds = "(\n 35\n)";
followings = (
);
}
问题似乎是因为以下ID存储为字符串而不是数组:
followingIds = "(\n 35\n)";
大概是因为RestKit不能告诉您希望它作为一个数组,因为它只是可转换的
您需要更新代码,以便以下id引用所有状态类型为NSArray,然后RestKit应该希望维护JSON中的数据类型,并与外部id列表匹配,而不是单个无效id。无法从中看出任何东西,因为您没有显示与对象相关的映射代码或示例JSON日志是多对多关系吗?@wain我已根据请求进行编辑,但在核心数据中,以下ID是可转换的。lldb po[[mappingResult.array objectAtIndex:1]following id]4好的,那可能只是一个日志记录。将需要打开跟踪日志记录,以查看在外键连接期间发生的详细情况。这也可能与我考虑过RKUnionAssignmentPolicy有关,但找不到为AddConnectionForRelationship定义分配策略的方法是的,我认为这可能是一个疏忽——RKRelationshipConnectionOperation中一个相对不常见的用例的一个bug,其中没有考虑分配策略。因此为了克服这个限制,映射完成后,我将手动连接对象?你认为呢?
+ (RKEntityMapping *)mapping
{
RKEntityMapping *entityMapping = [RKEntityMapping mappingForEntityForName:[self entityName]
inManagedObjectStore:[RKManagedObjectStore defaultStore]];
[entityMapping addAttributeMappingsFromDictionary:@{
@"id": @"userId",
@"followingIds": @"followingIds",
@"username": @"username",
@"email": @"email",
@"profile.pro": @"pro",
@"profile.type": @"type",
@"profile.country": @"countryCode",
@"social.facebook": @"facebook",
@"social.youtube": @"youtube",
@"social.twitter": @"twitter",
@"social.instagram": @"instagram",
@"created": @"timestamp"
}];
entityMapping.identificationAttributes = @[ @"userId" ];
RKRelationshipMapping *relationship = [RKRelationshipMapping relationshipMappingFromKeyPath:@"medias" toKeyPath:@"medias" withMapping:[AOMedia mapping]];
relationship.assignmentPolicy = RKUnionAssignmentPolicy;
[entityMapping addPropertyMapping:relationship];
relationship = [RKRelationshipMapping relationshipMappingFromKeyPath:@"settings" toKeyPath:@"settings" withMapping:[AOSetting mapping]];
relationship.assignmentPolicy = RKUnionAssignmentPolicy;
[entityMapping addPropertyMapping:relationship];
[entityMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"cover" toKeyPath:@"cover" withMapping:[AOMedia mapping]]];
[entityMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"avatar" toKeyPath:@"avatar" withMapping:[AOMedia mapping]]];
[entityMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"stats" toKeyPath:@"stats" withMapping:[AOUserStat mapping]]];
[entityMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"likes" toKeyPath:@"likes" withMapping:[AOLike mapping]]];
[entityMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"favorites" toKeyPath:@"favorites" withMapping:[AOFavorite mapping]]];
[entityMapping addConnectionForRelationship:@"followings" connectedBy:@{@"followingIds": @"userId"}];
[entityMapping setAssignsDefaultValueForMissingAttributes:YES];
return entityMapping;
}
followingIds = "(\n 35\n)";