2016-11-20 4 views
0

以前は、必要なすべての値を持つオブジェクトが1つしかありませんでした。私はそれらを再編成し、別々のオブジェクトを作った。元のオブジェクトに新しいオブジェクトの種類のプロパティを追加しました。 オブジェクトのプロパティに古いプロパティ値を割り当てる方法を教えてください。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 

私は別のオブジェクトである新しいプロパティに古いプロパティを移行できますか?

EDIT:一時的に、私は

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

でそれを解決したが、私は、これは適切なソリューションであるとは思いません。だから、誰かがこれに対する解決策を持っていれば、私はそれを感謝します。

答えて

1

スキーマの移行中にこれを行うと仮定すると、migration.createを使用して、initではなく新しいオブジェクトを作成する必要があります。次に、それらのオブジェクトを新しいオブジェクトの行に沿って設定します。

+0

はい、私はスキーマの移行を行っています。私はあなたの答えを試みましたが、このエラーが発生しました: 'Type of Value 'MigrationObject'(別名 'DynamicObject')にメンバーがありません 'id''オブジェクトにidフィールドがあるので、エラーは表示されません。 – Dan

+0

これは実際には 'other [" id "]'と 'other [" str "]'でなければなりません。 @Danielというエラーメッセージが表示される理由は、マイグレーションブロック内のレルムオブジェクトが型付きモデルではないことです(型付けされたモデルがもはや存在しない古いスキーマバージョンのオブジェクトを扱うときは明らかに機能しません)。 – jpsim

+0

私はこれを反映するために答えを更新しました。今は正しいはずです。 – jpsim

関連する問題