【发布时间】:2012-04-11 16:34:38
【问题描述】:
我是 RestKit 的新手。我正在尝试在实体空间和用户之间映射多对多关系。就本问题而言,假设所有 Space 对象都已正确地位于 Core Data 存储中。
在 REST API 中,我可以通过一次调用来获取给定空间的所有用户。首先,当我初始化我的网络获取类时,我设置了一个适合解析用户列表的映射:
RKManagedObjectMapping *teamMapping = [RKManagedObjectMapping mappingForEntity:[NSEntityDescription entityForName:@"User" inManagedObjectContext:self.manager.objectStore.primaryManagedObjectContext] inManagedObjectStore:self.manager.objectStore];
[teamMapping mapKeyPath:@"id" toAttribute:@"userID"];
[teamMapping mapKeyPath:@"name" toAttribute:@"name"];
teamMapping.primaryKeyAttribute = @"userID";
[self.manager.mappingProvider setMapping:teamMapping forKeyPath:@"users.user"];
然后,为了填充用户到空间的链接,我这样做:
NSArray *spaces = [self.managedObjectContext executeFetchRequest:[NSFetchRequest fetchRequestWithEntityName:@"Space"] error:nil];
for (QBSpace *space in spaces)
{
[self.manager loadObjectsAtResourcePath:[NSString stringWithFormat:@"space/%@/users", space.wikiName] usingBlock:^(RKObjectLoader *loader) {
loader.onDidLoadObjects = ^(NSArray *objects){
space.team = nil;
for (QBUser *user in objects)
{
[space addTeamObject:user];
}
};
}];
}
也就是说,我根据返回的对象数组手动添加了空格->用户链接。
这是正确的做法吗?它似乎工作正常,但我担心我错过了关于 RestKit 自动执行操作的技巧。
相关文件的返回 XML 如下所示
<users type="array">
<user>
<id>aPrimaryKey</id>
<login>loginName</login>
<login_name warning="deprecated">loginName</login_name>
<name>Real Name</name>
</user>
所以返回的文件中没有任何内容表明我试图链接到的空间:我在我请求的 URL 中传递了它,但返回的文档中没有关于它的任何内容,这就是我出现的原因使用这个基于块的解决方案。
对于所有 RestKit 用户,这看起来是一种可接受的形成多对多链接的方式吗?
【问题讨论】: