我对RestKit有一个有趣的问题。我希望能够通过CoreData中的uniqueID映射我的对象。看起来RKConnectionDescription应该允许我这样做。我想在RegisteredUser和BasicModel对象之间建立连接。问题在于,当我创建连接时,我收到NSInternalInconsistencyException
,因为RestKit说,Cannot connect relationship: invalid attributes given for source entity 'RegisteredUser'
以下是我为用户创建映射的代码。
RKEntityMapping *userEntityMapping = [RKEntityMapping mappingForEntityForName:@"RegisteredUser" inManagedObjectStore:[RKManagedObjectStore defaultStore]];
[userEntityMapping addAttributeMappingsFromArray:@[@"uniqueID",
@"createdAt",
@"updatedAt",
@"firstName",
@"middleName",
@"lastName",
@"email",
@"gender",
@"dateOfBirth",
@"profileImageUpdatedAt"]];
NSEntityDescription *userEntity = [NSEntityDescription entityForName:@"RegisteredUser" inManagedObjectContext:[RKManagedObjectStore defaultStore].mainQueueManagedObjectContext];
NSRelationshipDescription *basicModelRelationship = [userEntity relationshipsByName][@"basicModel"];
RKConnectionDescription *connection = [[RKConnectionDescription alloc] initWithRelationship:basicModelRelationship attributes:@{@"basicModel": @"uniqueID"}];
[userEntityMapping addConnection:connection];
在核心数据中,RegisteredUser
与名为BasicModel
的{{1}}实体具有一对一的关系。此外,basicModel
实体具有uniqueID属性。
据我所知,我正在根据示例here正确创建RKConnectionDescription。问题是当我调用BasicModel
时,它断言initWithRelationship:attributes:
实体上有一个basicModel
属性,当然不是。只有RegisteredUser
关系,所以我得到了上面描述的崩溃。
为什么RestKit甚至会检查basicModel
是否有属性RegisteredUser
,如果它希望我为关系创建连接?我在这里错过了什么吗?
答案 0 :(得分:1)
使用RKConnectionDescription
是正确的,但您如何使用它是错误的。在这一行:
initWithRelationship:basicModelRelationship attributes:@{@"basicModel": @"uniqueID"}];
你告诉RestKit关于这个关系,但它应该在basicModel
实体中使用一个名为RegisteredUser
的属性来找到要连接的BasicModel
,匹配{{1}的值1 {} basicModel
RegisteredUser
中的uniqueID
。
因此,BasicModel
需要改变。您需要向basicModel
实体添加basicModelId
等属性。它可能是暂时的。将其添加到RegisteredUser
映射,然后使用RegisteredUser
中的basicModelId
。