cocoa - RestKit 与核心数据 : it works, 进行多对多,但我做得对吗?

标签 cocoa restkit

我是 RestKit 新手。我正在尝试映射实体空间和用户之间的多对多关系。出于此问题的目的,假设所有 Space 对象都已正确存储在核心数据存储中。

在 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->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 中,但是返回的文档中没有任何内容,这就是我提出的原因使用这个基于 block 的解决方案。

对于所有 RestKit 用户来说,这看起来是一种可以接受的形成多对多链接的方式吗?

最佳答案

如果有效的话,可以吗?

您可以考虑拥有一个 Space 自定义 ManagedObject。让它响应 RKObjectLoaderDelegate

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

您还可以让您的 Space 类响应 User 的委托(delegate),然后将它们绑定(bind)到他们的空间中?

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

关于cocoa - RestKit 与核心数据 : it works, 进行多对多,但我做得对吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10110156/

相关文章:

objective-c - 如何在单击按钮时从文本字段中删除光标?

objective-c - RestKit willMapData :

iphone - iOS 后台 Location 不发送 http 请求

cocoa - 数据源和委托(delegate)有什么区别?

c - 在 Objective-C 类中混合 C 函数

objective-c - 找不到 RKJSONParserJSONKit

ios - "libRestKit.a, file was built for archive which is not the architecture being linked (armv7)"

ios - RestKit 中每个请求的自定义 header

xcode - Swift 2 的 NSBezierPath 错误

objective-c - NSMenuItem 的值与 BOOL 绑定(bind)