0

我需要序列化一个 Core Data 类 ( ),它与抽象实体 ( )Questionnaire具有一对多关系 ( )。questionsQuestion

Question是许多具体子类 ( BooleanQuestion, ClosedQuestion...) 的父实体,每个子类都有一个RKManagedObjectMapping.

如何设置问卷映射来序列化这种多态关系?

如果它不是多态的,我会这样做:

[questionnaireMapping mapRelationShip:@"questions" withMapping:[questionMapping inverseMapping]];

但我不能这样做:问题不会属于任何单一类别,因此没有单一的映射可以通过。

此外,问题是抽象的,甚至没有映射(尽管我可以定义一个)。

我如何使用 RestKit 0.10.3 版来处理这个问题?

请注意,我非常接近发布我的产品,我真的不愿意在我的产品周期后期迁移到 RestKit 0.20。

我想我可以将所有具体的Question子类聚合成Question,使其具体和单态(和整体)。那将是丑陋的(尽管我相信这正是 Core Data 在幕后对 SQLite 所做的)。

还有更优雅的吗?

谢谢

京东

4

1 回答 1

0

无论如何升级到 0.20 也无济于事,因为我不相信这种情况也包括在内。

我建议您KVC在层次结构中的每个类上实现一个方法(或仅使用),该方法返回键和值的字典。这可以使用KVC -dictionaryWithValuesForKeys:. 键列表应该是所有类的所有键的并集。现在您可以构建一个可以映射的字典数组。您还需要实施KVC -valueForUndefinedKey:以防止在此过程中出现异常。

现在,在您的Questionnaire类上,您可以实现一个方法来循环questions关系内容并构建字典列表。假设该方法被调用encodedQuestions,您的映射将类似于:

[questionnaireMapping mapRelationShip:@"encodedQuestions" withMapping:questionDictMapping];

我实际上并没有尝试过这样做,所以有一个关于 RestKit 在 Core Data 对象上使用的反射以及它对你的关系映射有多高兴的问题。

于 2013-04-25T07:48:34.627 回答