2016-10-07 56 views
1

我有一个简单的目标:RLMException:对象类型不匹配RLMArray型

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一个子类我不明白为什么这个应用程序崩溃在这个错误消息。

回答

5

范围List s不是共变的。您只能在其中存储完全声明类型的对象。

1
self.myObjects = List<MyObject>(); 

这不是一个合适的值

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

是托马斯已经回答了,但谢谢你。如果我可以使用Java开发iOS应用程序,我的生活将会变得更加简单..... – Mulgard