我目前在我的应用中使用以下流程:
所以我要做的第一件事就是查询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
。
它有效,但我个人不喜欢这种解决方案,例如如果您更新数据模型,则必须保持结构一致等,所以如果您有更好的设计模式,请分享。
答案 0 :(得分:0)
当您的视图控制器在此时启动时,启动带有域的事务。 如果您希望保存更改,则提交该事务,如果用户返回到不保存,则不提交事务。