3

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

我在一个要点中提供了所有代码,因为我发现在 StackOverflow 上更容易查看和格式化。抱歉,如果这实际上给您带来不便。

https://gist.github.com/3733334

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

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

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

我觉得我可能缺少一些简单的东西,任何帮助将不胜感激。

谢谢!

4

2 回答 2

1

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

于 2012-09-19T22:45:19.160 回答
0

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

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

这也应该有帮助:http ://andriyadi.me/logging-in-restkit/ 。

核心数据指南也强调你应该建立反比关系(但这不是强制性的)。

在我看来,获取实体也可以做得更好。在我的项目中,我有一个 NSObject 子类单例,它(在其他一些核心数据便利功能中)通过实体和谓词获取:

- (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 和对象映射:)。

于 2012-09-18T10:50:57.080 回答