ios - 防止 Realm 在更新对象时覆盖属性

标签 ios swift realm

我已经为 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/

相关文章:

swift - Realm,避免存储一些属性

swift - Realm Swift 代码用于查询/添加具有关系的 3 个深表中的记录

ios - 如何生成开发 MDM/APNS 证书?

iOS JSON 解析错误

ios - Swift - UIScrollView 中的 UISwipeGestureRecognizer

ios - Facebook 通过 ios 中的社交框架登录

swift - 你如何像 Apple 一样构建你的 Swift Cocoa Touch 框架(例如 UIKit)

android - 如何使用从后台线程加载的 RealmResult 并在 Android 主线程中使用它

swift - 如何对大量入站 CloudKit 通知进行排队

ios - 临时分发 Swift iOS 应用程序