RestKit,核心数据和关系问题。父对象无法识别子集

时间:2012-09-16 17:41:03

标签: ios core-data restkit relationship

我正在尝试使用RestKit映射文章与属于他们的照片之间的关系。在请求资源时,两个对象都被正确存储,但似乎关系不会持久存在。事实上,文章模型似乎甚至没有响应照片选择器(这可能是'duh'点,但我将提供完整的代码通过)。

我已经在gist中提供了所有代码,因为我发现在StackOverflow上更容易查看和格式化。对不起,如果这实际上给您带来不便。

https://gist.github.com/3733334

这是核心数据模型的图像和建立的关系(抱歉,我必须将它们组合起来,因为我目前只能发布2个超链接):

http://imageshack.us/a/img33/5039/stackoverflowissue.jpg

当我尝试通过article.photos访问照片时,除了对象之间的关系外,一切似乎都正常工作。选择器无法识别。我在Photo模型中设置了一个convience方法来返回所有带有匹配文章ID的照片,但我觉得这是一个不理想的解决方案,因为它有点消除了创建关系的整个想法。

我觉得我可能会有一些简单的事情,我会非常感激任何帮助。

谢谢!

2 个答案:

答案 0 :(得分:1)

所以当然这是一个“Duh”错误。在本地开发人员的帮助下,他指出我的Article.h文件中的Photos变量是NSArray,需要更改为NSSet来存储RestKit映射的对象。

答案 1 :(得分:0)

不同版本的RestKit之间存在一些不一致。如果您使用的是最新的映射,则应按如下所示进行设置:https://github.com/RestKit/RestKit/wiki/Object-mapping。如果要为特定于模型的方法使用实体类,请在NSManagedObjects上创建类别,以便在更改数据模型时可以重新生成它们(仅在将方法提取到类别后执行此操作!在.xcdatamodeld中选择一个实体然后去编辑 - >创建NSManagedObject子类...)。

我将映射移动到负责与远程API同步的控制器。

这也很有帮助:http://andriyadi.me/logging-in-restkit/

此外,核心数据指南强调您应该建立反向关系(但这不是强制性的)。

在我看来,获取实体也可以做得更好。在我的项目中,我有一个NSObject子类单例(在其他一些Core Data便利功能中)按实体和谓词提取:

- (NSArray *)fetchEntities:(NSString *)entity usingPredicate:(NSPredicate *)predicate {
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:entity];
    [request setPredicate:predicate];
    NSError *error = nil;
    NSArray *results = [self.managedObjectContext executeFetchRequest:request error:&error];
    if (error) {
        RLog(@"Error fetching entity %@ using predicate %@", entity, predicate);
        abort();
    }
    if ([results count] >= 1) {
        return results;
    }
    return nil;
}

您可以更改它以将谓词作为NSStrings传递。

旁注: 目前我也在努力研究RestKit和对象映射:)。