(寻找保存Realm属性的最佳方法。
我有一个UIViewController,它有很多TextView等,我从Realm对象中填充。
每次修改文本字段时,我都需要发回以更改领域属性。
(不酷)的事情是,我无法直接保存,我必须打开写入事务。
object.propertyA= “hello” // crash
try! realm.write { //work
userBeer?.Name = lblbeerName.text!
}
所以,我发现所有文字都有点痛苦(而且不干净)。
我看过rxRealm,但看不到任何(新手)样本。
所以,我有两种方法不介意
修改属性的模型getter和setter
var beerName:String? {
得到{
return self.Name
}
设置{
尝试! realm.write {
self.txtName = beerName!
}
}
从此处使用RXSwift方法(https://www.raywenderlich.com/149753/bond-tutorial-bindings-swift)
您怎么看?
我完美的世界将是找到一种方法来直接使用TextField.text属性,例如: myRealmObject.property.BindTo(self.txtName)
答案 0 :(得分:1)
来自Realm的Katsumi。虽然这不是最好的方法,但我提出了另一种方法。您可以使用realm.beginWrite()
和try! realm.commitWrite()
代替基于块的API进行长期交易。
例如,您可以在视图出现时打开事务,然后在视图消失时关闭事务,如下所示:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
realm.beginWrite()
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
try! realm.commitWrite()
}
通过这种方式,您可以随时在视图中为Realm对象赋值。 小心不要让交易保持开放状态。为避免增加文件大小,请勿在事务处理期间在后台频繁更新数据。
答案 1 :(得分:0)
更改write
块中的属性:
try! realm.write {
object.propertyA = “hello”
userBeer?.Name = lblbeerName.text!
}