假设我有一些宠物(有主键)的用户。
class User : Object {
let pets = List<Pet>()
}
现在我想更新列表中的宠物(来自 API)。我该怎么做?删除所有宠物并插入新宠物?没有什么能比得上createOrUpdate()
方法。
假设我有一些宠物(有主键)的用户。
class User : Object {
let pets = List<Pet>()
}
现在我想更新列表中的宠物(来自 API)。我该怎么做?删除所有宠物并插入新宠物?没有什么能比得上createOrUpdate()
方法。
列表上没有创建或更新语义的方法。但是有一个用于单个对象的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)
但这不会负责清理可能以前为该用户创建的 Pets。
您可以使用
object.pets = // What you want
realm.write
{
add(object, update: true)
}
在此处查看文档
不要忘记在模型类中定义主键