如何使用 RestKit 序列化多态对多核心数据关系?
Posted
技术标签:
【中文标题】如何使用 RestKit 序列化多态对多核心数据关系?【英文标题】:how to serialize polymorphic to-many Core Data relationship with RestKit? 【发布时间】:2013-04-25 05:20:42 【问题描述】:我需要序列化一个与抽象实体 (Question
) 具有一对多关系 (questions
) 的核心数据类 (Questionnaire
)。
Question
是许多具体子类(BooleanQuestion
、ClosedQuestion
...)的父实体,每个子类都有一个 RKManagedObjectMapping
。
如何设置问卷映射来序列化这种多态关系?
如果它不是多态的,我会这样做:
[questionnaireMapping mapRelationShip:@"questions" withMapping:[questionMapping inverseMapping]];
但我不能这样做:问题不会属于任何单一类别,因此没有单一的映射可以传递。
此外,问题是抽象的,甚至没有映射(尽管我可以定义一个)。
如何使用 RestKit 版本 0.10.3 处理?
请注意,我的产品即将发布,我真的不愿意在我的产品周期后期迁移到 RestKit 0.20。
我想我可以将所有具体的 Question
子类聚合到 Question
中,使其具体化和单态(和整体)。那会很难看(尽管我相信这正是 Core Data 在幕后对 SQLite 所做的)。
还有更优雅的吗?
谢谢
京东
【问题讨论】:
【参考方案1】:无论如何升级到 0.20 也无济于事,因为我不相信这种情况也包括在内。
我建议您在层次结构中的每个类上实现一个方法(或只使用KVC
),该方法返回一个键和值的字典。这可以使用KVC
-dictionaryWithValuesForKeys:
有效地完成。键列表应该是所有类的所有键的并集。现在您可以构建一个可以映射的字典数组。您还需要实现 KVC
-valueForUndefinedKey:
以防止在此过程中出现异常。
现在,在您的 Questionnaire
类上,您可以实现一个方法来循环 questions
关系内容并构建字典列表。假设该方法名为encodedQuestions
,您的映射将类似于:
[questionnaireMapping mapRelationShip:@"encodedQuestions" withMapping:questionDictMapping];
我实际上并没有尝试过这样做,所以有一个问题是关于 RestKit 在 Core Data 对象上使用的反射以及它对你的关系映射有多满意。
【讨论】:
以上是关于如何使用 RestKit 序列化多态对多核心数据关系?的主要内容,如果未能解决你的问题,请参考以下文章
不使用 Web 服务时如何使用来自 RestKit 的核心数据?