我正在尝试使用RestKit映射文章与属于他们的照片之间的关系。在请求资源时,两个对象都被正确存储,但似乎关系不会持久存在。事实上,文章模型似乎甚至没有响应照片选择器(这可能是'duh'点,但我将提供完整的代码通过)。
我已经在gist中提供了所有代码,因为我发现在StackOverflow上更容易查看和格式化。对不起,如果这实际上给您带来不便。
https://gist.github.com/3733334
这是核心数据模型的图像和建立的关系(抱歉,我必须将它们组合起来,因为我目前只能发布2个超链接):
http://imageshack.us/a/img33/5039/stackoverflowissue.jpg
当我尝试通过article.photos访问照片时,除了对象之间的关系外,一切似乎都正常工作。选择器无法识别。我在Photo模型中设置了一个convience方法来返回所有带有匹配文章ID的照片,但我觉得这是一个不理想的解决方案,因为它有点消除了创建关系的整个想法。
我觉得我可能会有一些简单的事情,我会非常感激任何帮助。
谢谢!
答案 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和对象映射:)。