警告:我是iOS、Swift和Realm的新手。我保存和检索Realm没有问题,但我似乎无法在不崩溃的情况下更新现有对象。
AppDelegate:
class Bale: Object {
dynamic var uid = NSUUID().UUIDString
dynamic var id = 0
dynamic var number = 0
dynamic var type = 0
dynamic var weight = 0
dynamic var size = ""
dynamic var notes = ""
override static func primaryKey() -> String? {
return "uid"
}
}
别处:(xcode坚持所有的!)
let bale: Bale = getBaleByIndex(baleSelected)
bale.id = Int(textID.text!)!
bale.number = Int(textNumber.text!)!
bale.type = Int(textType.text!)!
bale.weight = Int(textWeight.text!)!
bale.size = textSize.text!
bale.notes = textNotes.text!
try! realm.write {
realm.add(bale, update: true)
}
getBaleByIndex:
func getBaleByIndex(index: Int) -> Bale {
return bales[index]
}
我从getBaleByIndex在其他地方返回的Bale对象中读取数据,因此该函数工作正常。我得到SIGABRT在类AppDelegate: UIResponder, UIApplicationDelegate {。在领域文档或示例中没有显示更新的完整示例。我也尝试过使用realm。创建和适当的参数,但仍然没有去。看起来很简单,所以我肯定我在做蠢事。任何帮助都太好了。谢谢!
让您恼火的是,一旦向Realm添加了对象,数据就不仅仅存储在内存中,而是直接存储在持久存储中。您必须在写事务中对对象进行所有修改,这些修改将在写事务提交后自动生效。如果之前已将其持久化,则无需再次将其添加到Realm。因此,您需要将代码更改为如下内容:
try! realm.write {
let bale: Bale = getBaleByIndex(baleSelected)
bale.id = Int(textID.text!)!
bale.number = Int(textNumber.text!)!
bale.type = Int(textType.text!)!
bale.weight = Int(textWeight.text!)!
bale.size = textSize.text!
bale.notes = textNotes.text!
// Not needed, but depends on the implementation of `getBaleByIndex`
// and whether there is the guarantee that it always returns already
// persisted objects.
//realm.add(bale, update: true)
}