RLMException:对象类型与RLMArray类型

时间:2016-10-07 18:02:38

标签: swift realm

我有一个简单的对象:

class MyObject : Object {
    dynamic var dummyField: String!;
}

和另一个继承自MyObject的对象:

class MyOtherObject : MyObject {
    dynamic var anotherDummyField: String!;
}

现在我做以下事情。我有一个MyObject的域列表,我创建了MyOtherObject的实例并尝试将其保存在列表中:

class Operator {
    internal var myObjects: List<MyObject>!;

    internal var myObject: MyObject!;

    func operate() {
        self.myObject = MyOtherObject();
        self.myObject.dummyField = "dummy field";
        self.myObject.anotherDummyField = "another dummy field";

        self.myObjects = List<MyObject>();
        self.myObjects.append(myObject); // crash!
    }
}

它因错误而崩溃:

Terminating app due to uncaught exception 'RLMException', reason: 'Object type 'MyOtherObject' does not match RLMArray type 'MyObject'.'

由于MyOtherObjectMyObject的子类,我无法理解为什么应用程序此时崩溃并显示此错误消息。

2 个答案:

答案 0 :(得分:6)

领域List不是协变的。您只能在其中存储具有完全声明类型的对象。

答案 1 :(得分:1)

self.myObjects = List<MyObject>();

这不是一个合适的值

self.myObjects = List<Needs actual object here not class>();