领域,保存\更新的最佳方法\观察字符串到Realm对象

时间:2017-04-22 13:22:13

标签: swift realm rx-swift

(寻找保存Realm属性的最佳方法。

我有一个UIViewController,它有很多TextView等,我从Realm对象中填充。

每次修改文本字段时,我都需要发回以更改领域属性。

(不酷)的事情是,我无法直接保存,我必须打开写入事务。

object.propertyA= “hello”    // crash

try! realm.write {      //work
        userBeer?.Name = lblbeerName.text!
}

所以,我发现所有文字都有点痛苦(而且不干净)。

我看过rxRealm,但看不到任何(新手)样本。

所以,我有两种方法不介意

  1. 修改属性的模型getter和setter

    var beerName:String? {         得到{             return self.Name         }         设置{             尝试! realm.write {
                self.txtName = beerName!         }     }

  2. 从此处使用RXSwift方法(https://www.raywenderlich.com/149753/bond-tutorial-bindings-swift

    • 将TextField.text添加到var String中,并观察此字符串以进行写入。
  3. 您怎么看?

    我完美的世界将是找到一种方法来直接使用TextField.text属性,例如: myRealmObject.property.BindTo(self.txtName)

2 个答案:

答案 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!
}
相关问题