Xcode 10.1,Swift 4.2,Realm 3.12(数据库)
我有一个Mac应用程序,其中多个用户协作并且数据在多个设备之间同步。所以数据总是在变化。
在整个应用程序中,我编写的代码在后台发生同步时更新UI。我一直遇到的一个问题是,当用户输入NSTextField
时,会发生同步(来自其他用户的更改),并且他们输入的NSTextField
会突然恢复为新的同步值,并且用户将丢失他们的内容类型。
这是我放在一起模拟问题的演示Mac应用程序。如果您开始在该字段中输入,则每10秒对该字段进行更新:https://d.pr/f/8iXjqx
我想知道其他Mac开发人员用什么策略来避免这些冲突。
如果有光标存在,有没有办法告诉NSTextField
不更新?我是否必须在每次击键时将值保存到本地数据库,然后在同步发生时以某种方式进行合并?
在你的textFields中,我会发现你是否活跃:
override func becomeFirstResponder() -> Bool
{
isFirstResponder = true
return super.becomeFirstResponder()
}
override func resignFirstResponder() -> Bool
{
isFirstResponder = false
return super.resignFirstResponder()
}
然后,当您更新文本时,如果设置了该标志,请保留该文本。
假设您不希望以某种方式合并文本,如果在您退出时未进行任何编辑,则将文本刷新到模型值,否则将更改写回模型。