2016-06-16 4 views
1

問題が発生しました。のは、私は、このレルムのモデルを持っていると仮定しましょう:レルムオブジェクトが変更されました。そのオブジェクトの別のコピーも変更されました。なぜですか?

class Table: Object { 
    dynamic var id = 0 
    dynamic var x: Int = 0 
    dynamic var y: Int = 0 
    dynamic var width:Int = 0 
    dynamic var height: Int = 0 
    dynamic var text: String = "" 
    dynamic var color: String = "" 
    dynamic var type: String = "" 

    let food = List<Food>() 

    override static func primaryKey() -> String { 
     return "id" 
    } 
} 

class Food : Object { 

    dynamic var id: Int = 0 
    dynamic var name = "" 
    dynamic var ingredients: String = "" // bigger text field 
    dynamic var size: Int = 0 // none, small, medium, big size 
    dynamic var price: Float = 0.0 
    dynamic var category: Category? 
    let additionalIngredients = List<Ingredient>() 

    override static func primaryKey() -> String { 
     return "id" 
    } 
} 

のは、私は1つのテーブルを持っているので、同様に、そのテーブルの上に2回、同じ食べ物を追加しましょう:

try! realm.write(){ 
    table.food.append(food) // A 
    table.food.append(food) // B 
    realm.add(table, update: true) 
} 

を私は食品AのためのadditionalIngredientsを変更した場合は、同じ食べ物Bでもその値が変わります。私がやっていることは、このトランザクションに変更します。

try! realm.write(){ 
    table.food.first!.additionalIngredients.removeAll() 
    for ingredient in ingredientsToAdd{ 
     table.food.first!.additionalIngredients.append(ingredient) 
    } 
    realm.add(table, update: true) 
} 

私が参照/インスタンスに関して何か間違ったことをやっていると思い、誰かが私にヒントを与えることができますか?

ありがとうございます!

+0

food_Aとfood_Bが同じオブジェクトを参照しているために発生すると思います – cmashinho

答えて

3

List.append()は、オブジェクトのコピーではなくリストにオブジェクトを追加するので、Foodオブジェクトが1つしかありません。

+0

その食品オブジェクトのコピーをテーブルに追加して操作するにはどうすればよいですか?それはレルムでも可能ですか? – MkaysWork

+0

@MkaysWorkあなたのモデルにはプライマリキーがあるので、新しいコピーのためにそれを変更する必要があります。この問題はhttps://github.com/realm/realm-cocoa/issues/1910が役に立ちます – Dmitry

+0

それについてもう一度あなたは正しい@ドミトリーです。ありがとうございました! – MkaysWork

関連する問題