Xcode 10.1,Swift 4.2,Realm 3.12(数据库)
我有一个Mac应用程序,其中多个用户可以协作,并且数据可以在多个设备上同步。因此数据总是在变化。
在整个应用程序中,我编写了在后台发生同步时更新UI的代码。我一直遇到的一个问题是,当用户输入NSTextField
时,将会发生同步(根据另一个用户的更改),并且他们输入的NSTextField
会突然恢复为新的同步值,用户将丢失他们输入的内容。
这里是一个我模拟在一起的演示Mac应用程序。如果您开始输入该字段,则该字段每10秒钟更新一次:https://d.pr/f/8iXjqx
我想知道其他Mac开发人员采用了哪些策略来避免这些冲突。
是否有一种方法可以告诉NSTextField
中是否存在游标而不进行更新?我每次击键时都必须将值保存到本地数据库中,然后在发生同步时以某种方式合并吗?
答案 0 :(得分:1)
在您的textFields中,我将捕获您是否处于活动状态:
override func becomeFirstResponder() -> Bool
{
isFirstResponder = true
return super.becomeFirstResponder()
}
override func resignFirstResponder() -> Bool
{
isFirstResponder = false
return super.resignFirstResponder()
}
然后,当您更新文本时,如果已设置该标志,则保留该文本。
假设您不希望以某种方式合并文本,请在辞职时未进行任何编辑的情况下将文本刷新为模型值,否则将更改写回到模型中。