RestKit与核心数据多对多:它有效,但我做得对吗?

时间:2012-04-11 16:34:39

标签: cocoa restkit

我是RestKit的新手。我试图在实体Space和User之间映射多对多关系。出于此问题的目的,假设所有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];
            }

        };
    }];
}

也就是说,我根据返回的对象数组手动添加space->用户链接。

这是正确的方法吗?它似乎工作正常,但我担心我会错过关于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用户,这看起来像是一种形成多对多链接的可接受方式吗?

1 个答案:

答案 0 :(得分:1)

如果有效,可以吗?

您可以考虑使用Space自定义ManagedObject。让它回应RKObjectLoaderDelegate

然后,当您收到回复时,您可以从其中触发loadAtResourcePath objectLoader:didLoadObject:(id)objectobjectLoader:didLoadObjectDictionary: 方法

您还可以让您的Space类响应来自User的委托,然后将它们绑定到他们的空间中吗?

可能会更好,但这取决于你想要实现的目标。无论如何,值得深思。 :)

相关问题