我已经为 iOS 中的 Realm 对象设置了一个 REST API。但是我发现在我的对象中创建一个最喜欢的标志有一个问题。我创建了一个 favorite bool,但是每次从 API 更新对象时,它都会再次将 favorite 设置为默认 false。在这里我希望这个标志不被更新,因为收藏夹只存储在本地。我怎样才能做到这一点?
class Pet: Object{
dynamic var id: Int = 1
dynamic var title: String = ""
dynamic var type: String = ""
dynamic var favorite: Bool = false
override class func primaryKey() -> String {
return "id"
}
}
创建或更新
let pet = Pet()
pet.id = 2
pet.name = "Dog"
pet.type = "German Shephard"
try! realm.write {
realm.add(pet, update: true)
}
最佳答案
有两种方法可以解决这个问题:
<强>1。使用忽略的属性:
你可以告诉 Realm 某个属性不应该被持久化。为了防止你的 favorite
属性被 Realm 持久化,你必须这样做:
class Pet: Object{
dynamic var id: Int = 1
dynamic var title: String = ""
dynamic var type: String = ""
dynamic var favorite: Bool = false
override class func primaryKey() -> String {
return "id"
}
override static func ignoredProperties() -> [String] {
return ["favorite"]
}
}
或者你可以
<强>2。进行部分更新
或者您可以在更新Pet
对象时明确告诉Realm 应该更新哪些属性:
try! realm.write {
realm.create(Pet.self, value: ["id": 2, "name": "Dog", "type": "German Shepard"], update: true)
}
这样 favorite
属性就不会改变。
结论
这两种方法有一个很大的区别:
Ignored Property:Realm 根本不会存储favorite
属性。您有责任跟踪它们。
部分更新:Realm 会存储“favorite”属性,但不会更新。
我想部分更新是您需要的。
关于ios - 防止 Realm 在更新对象时覆盖属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32891269/