Realm Swift设计模式

时间:2017-02-04 16:19:39

标签: ios swift realm

我目前在我的应用中使用以下流程:

  • UITableViewController :列出行
  • UIViewController :显示所点击行的详细信息
  • 领域:保留数据

所以我要做的第一件事就是查询Realm并填充UITableView。当点击一行时,会显示UIViewController以显示更多详情,包含在我先前查询的Realm Object中。因此我按以下方式传递对象

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let destinationVC = segue.destination as! UIViewController
        destinationVC.rowData = selectedRowData
        }

其中selectedRowData是与所选行对应的Realm Object
现在,UIViewController允许用户更新一些属性,这些属性必须在保存操作时存储在我的Realm实例中。话虽如此,我不能只是随时随地更新Realm Object

rowData.myCustomProperty = newCustomPropertyUpdatedByTheUser

否则Realm会抛出一个异常,说我试图在write语句之外执行写操作。显然我想要在此时执行写操作,否则如果用户否定操作(例如通过返回UITableViewController),我将无论如何都存储值,这是坏。
我想知道在这种情况下使用的最佳解决方案/模式是什么让我尽可能避免复制代码。
我想到的解决方案是暂时将值存储在某些变量/结构中,然后在单击保存按钮时更新rowData
它有效,但我个人不喜欢这种解决方案,例如如果您更新数据模型,则必须保持结构一致等,所以如果您有更好的设计模式,请分享。

1 个答案:

答案 0 :(得分:0)

当您的视图控制器在此时启动时,启动带有域的事务。 如果您希望保存更改,则提交该事务,如果用户返回到不保存,则不提交事务。