【发布时间】:2014-03-03 02:38:57
【问题描述】:
我在使用 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 的 BasicModel 实体具有一对一的关系。此外,BasicModel 实体有一个 uniqueID 属性。
据我所知,我正在根据示例here 正确创建 RKConnectionDescription。问题是当我调用initWithRelationship:attributes: 时,它断言RegisteredUser 实体上有一个basicModel 属性,当然不是。只有basicModel 关系,所以我遇到了上面描述的崩溃。
如果 RestKit 期望我为关系创建连接,为什么还要检查 RegisteredUser 是否具有属性 basicModel?我在这里错过了什么吗?
【问题讨论】:
-
你的 JSON 是嵌套的吗?还是按照 2 个不同的响应(外键映射)建立连接?
-
试图用外键映射。当请求用户时,JSON 将如下所示。 {results:{firstname:"Blah", lastName:"Blahblah", basicModel:3, etc...},其中 3 是 basicModel 托管对象的唯一 ID。
标签: ios core-data restkit restkit-0.20