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

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

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

https://gist.github.com/3733334

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

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

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

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

谢谢!

【问题讨论】:

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

标签: ios core-data restkit relationship


【解决方案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看起来很方便,我一定会试试的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多