0

いくつかのペット(主キーを持つ)を持っているユーザーがいるとします。

class User : Object {
    let pets = List<Pet>()
}

ここで、リスト内のペットを (API から) 更新したいと考えています。どうすればいいですか?すべてのペットを削除して、新しいペットを挿入しますか? メソッドのようなものはありませんcreateOrUpdate()

4

2 に答える 2

1

リストのセマンティクスを作成または更新するメソッドはありません。しかし、 には単一のオブジェクト用のものがありますRealm。その事実をさまざまな方法で利用できます。

すでにユーザーがいて、ペットの更新されたリストを取得しただけの場合は、参照されなくなったペットをクリーンアップし、すべてのペットをユーザーから削除してから、すべての新しいペットを追加する必要があります。

let realm = …
let user = …
let newPetList = [["name": "Rex"], ["name": "Gustav"]]

// If pets can belong only to one user, you may want to delete them by:
realm.delete(user.pets)
// Alternatively you can just remove them from the updated user:
//user.pets.removeAll()

let newPets = newPetList.map { (newPetData) in
   return realm.create(Pet, newPetData, update: true)
}
user.pets.appendContentsOf(newPets)

完全に更新されたユーザー データを取得し、ユーザーが主キーを持っていると仮定すると、ユーザーに対して直接 create または update を使用することもできます。

class User : Object {
    dynamic var id: Int
    let pets = List<Pet>()

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

let userData = ["id": "23", "pets": [["name": "Rex"], ["name": "Gustav"]]]
let user = realm.create(User, userData, update: true)

しかし、これは、そのユーザーのために以前に作成された可能性のあるペットのクリーンアップを処理しません。

于 2015-10-08T09:36:33.240 に答える