2016-11-20 65 views
0

以前,我只有一個對象具有我需要的每個值。我「重新組合」了它們並製作了單獨的物體。我將新對象的類型添加到原始對象中。 如何將舊屬性值分配給對象的屬性?如何使用Realm Swift將舊屬性遷移到新對象中

下面是我的對象代碼:

class MainObject: Object { 
    dynamic var id: Int = 0 
    // Schema 0 
    dynamic var otherId: Int = 0 
    dynamic var otherStr: String = "" 

    dynamic var anotherId: Int = 0 
    dynamic var anotherD: Double = 0.0 
    dynamic var anotherText: String = "" 

    // Schema 1 
    dynamic var otherObjectVar: OtherObject? 
    dynamic var anotherObjectVar: AnotherObject? 
} 

// Schema 1 
class OtherObject: Object { 
    dynamic var id: Int = 0 
    dynamic var str: String = 0 
} 
class AnotherObject: Object { 
    dynamic var id: Int = 0 
    dynamic var d: Double = 0.0 
    dynamic var text: String = "" 
} 

(改變變量名)

我試圖用convenience init(){},但沒有奏效。我也嘗試將一個對象實例分配給newObject,但這也不起作用。 這裏是爲了更容易理解該代碼:

let other = OtherObject() 
other.id = 0 
other.str = oldObject["otherStr"] as! string 
newObject["otherObjectVar"] = other 

我怎麼能老性遷移到一個新的屬性是另一個對象?

編輯:暫時,我

let obj = migration.create(MainObject.className()) 
migration.delete(obj) 

解決了這個問題,但我不認爲這是正確的解決方案。所以如果有人有這個解決方案,我會很感激。

回答

1

假設您在模式遷移過程中正在執行此操作,您需要使用migration.create來創建新對象,而不是它們的init。然後你可以將它們設置在新對象上,如下所示:

let other = migration.create(OtherObject.className()) 
other["id"] = 0 
other["str"] = oldObject["otherStr"] as! String 
newObject?["otherObjectVar"] = other 
+0

是的,我正在進行模式遷移。我嘗試了你的答案,但是我得到這個錯誤:'類型'MigrationObject'的值(又名'DynamicObject')沒有成員'id''對象有一個id字段,所以它不應該顯示錯誤。 – Dan

+0

這實際上應該是'other [「id」]'和'other [「str」]'。您得到錯誤消息@Daniel的原因是,遷移塊中的Realm對象不是您的類型化模型(在處理來自舊模式版本的對象時,顯然不適用,而這些對象的類型化模型已不在其周圍)。 – jpsim

+0

我已經更新了答案以反映這一點。現在應該是正確的。 – jpsim