【问题标题】:Realm "update" issue领域“更新”问题
【发布时间】:2017-06-09 18:13:57
【问题描述】:

我有一个名为 Person 的 Realm 模型:

class Person: Object {

static let sharedInstance = Person()

dynamic var tableId:Int = 1453
dynamic var verificationCode = ""
dynamic var userId = ""
dynamic var phoneNumber = ""
dynamic var userName = ""
dynamic var registered: Bool = false
dynamic var userPhoto: NSData = NSData()

override class func primaryKey() -> String? {
    return "tableId"
}

func save(isUpdate: Bool) {
    do {
        let realm = try Realm()
        try realm.write {
            realm.add(self, update: isUpdate)
        }
    } catch let error as NSError {
        fatalError(error.localizedDescription)
    }
}

所以首先我保存一些值:

func addTask(){
personObject.tableId = 1453
personObject.phoneNumber = "+60176336055"
personObject.verificationCode = "112"
personObject.userId = "r456666vhffg547567bg55"
personObject.registered = false
personObject.save(isUpdate: false)
}

后来我使用“更新”方法为其他列添加值:

func update() {
personObject.tableId = 1453
personObject.registered = true
personObject.userName = self.usernameText.text!
if self.chosenImage != nil, let imageData = self.chosenImage.jpeg(.lowest) as NSData? {
   personObject.userPhoto = imageData
}
personObject.save(isUpdate: true)
}

但是在我更新我的模型后,它会将旧值设置为空,我不想更新但保留它们。有没有办法在不再次传递所有现有值的情况下更新行?我感谢任何形式的帮助。谢谢。

【问题讨论】:

  • 你为什么不打电话给personObject.save(isUpdate: true)
  • 太棒了。谢谢。如果我调用 personObject.save(isUpdate: true) 而不是 sharedInstance 它将更新。我想这与一些线程有关?但是,我如何在不再次传递所有现有值的情况下更新我的行。如果我不通过它们,Realm 会将它们设置为空..
  • 不,你甚至不应该有一个人的“sharedInstance”。
  • 是的,我删除了它。但是你对第二部分有什么想法吗? “如何在不再次传递所有现有值的情况下更新我的行”.. 我只想保留它们。

标签: ios database-design swift3 realm realm-mobile-platform


【解决方案1】:

您可以通过 id(如果存在)查询对象并在事务中修改其属性,而不是插入所有字段设置正确的非托管副本。如果不存在,则应先将非托管副本添加到 Realm。

autoreleasepool {
    let realm = try! Realm()
    try! realm.write {
        let person = realm.objects(Person.self).filter(NSPredicate(format: "tableId = %@", tableId).first;
        person.userName = usernameText;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多