使用initWithRelationship创建RKConnectionDescription时的异常:属性:

时间:2014-03-03 02:38:57

标签: ios core-data restkit restkit-0.20

我对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,如果它希望我为关系创建连接?我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:1)

使用RKConnectionDescription是正确的,但您如何使用它是错误的。在这一行:

initWithRelationship:basicModelRelationship attributes:@{@"basicModel": @"uniqueID"}];

你告诉RestKit关于这个关系,但它应该在basicModel实体中使用一个名为RegisteredUser的属性来找到要连接的BasicModel,匹配{{1}的值1 {} basicModel RegisteredUser中的uniqueID

因此,BasicModel需要改变。您需要向basicModel实体添加basicModelId等属性。它可能是暂时的。将其添加到RegisteredUser映射,然后使用RegisteredUser中的basicModelId