RestKit、核心数据和关系问题。父对象不识别子集

Posted

技术标签:

【中文标题】RestKit、核心数据和关系问题。父对象不识别子集【英文标题】:RestKit, Core Data, and Relationship problems. Parent object not recognizing child set 【发布时间】:2012-09-16 17:41:02 【问题描述】:

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

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

https://gist.github.com/3733334

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

http://imageshack.us/a/img33/5039/***issue.jpg

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

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

谢谢!

【问题讨论】:

我有一个类似的问题,只是我将 mogenerator 用于我的核心数据模型,所以有一个 NSSet。 更新:我的也是一个愚蠢的错误,因为我未能在 CoreData 建模器中检查多对多关系。 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

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

Core Data 指南也强调你应该建立反向关系(但这不是强制性的)。

在我看来,获取实体也可以做得更好。在我的项目中,我有一个 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 和对象映射而苦苦挣扎:)。

【讨论】:

您好 Zamber,感谢您的回复。自从这篇文章以来,我已经在 .xcdatanodeld 中设置了反向关系属性。我相信我正在使用 RestKit 的 master 分支,并且我遵循了相同的对象映射指南。将映射移出类会对关系产生任何影响吗?我将检查设置类别,看看是否有帮助。另外,那个Entity Fetcher看起来很方便,我一定会试试的。

以上是关于RestKit、核心数据和关系问题。父对象不识别子集的主要内容,如果未能解决你的问题,请参考以下文章

Restkit/Core Data 关系映射,实体到相同类型的实体(父/子)

与 Core Data 和 RestKit 无关的关系

为啥父 UIStackView 无法识别子 StackView 的高度?

RestKit 按 ID 的属性关系

Restkit 0.24.0:如何将对象(包括对多关系)序列化为 JSON

restkit:映射 to_many 与核心数据的关系