2016-10-07 55 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