macOS应用:不要让同步更改覆盖用户键入

时间:2019-01-17 18:53:50

标签: macos cocoa nstextfield appkit

Xcode 10.1,Swift 4.2,Realm 3.12(数据库)

我有一个Mac应用程序,其中多个用户可以协作,并且数据可以在多个设备上同步。因此数据总是在变化。

在整个应用程序中,我编写了在后台发生同步时更新UI的代码。我一直遇到的一个问题是,当用户输入NSTextField时,将会发生同步(根据另一个用户的更改),并且他们输入的NSTextField会突然恢复为新的同步值,用户将丢失他们输入的内容。

这里是一个我模拟在一起的演示Mac应用程序。如果您开始输入该字段,则该字段每10秒钟更新一次:https://d.pr/f/8iXjqx

我想知道其他Mac开发人员采用了哪些策略来避免这些冲突。

是否有一种方法可以告诉NSTextField中是否存在游标而不进行更新?我每次击键时都必须将值保存到本地数据库中,然后在发生同步时以某种方式合并吗?

1 个答案:

答案 0 :(得分:1)

在您的textFields中,我将捕获您是否处于活动状态:

override func becomeFirstResponder() -> Bool
    {
        isFirstResponder = true
        return super.becomeFirstResponder()
    }

    override func resignFirstResponder() -> Bool
    {
        isFirstResponder = false
        return super.resignFirstResponder()
    }

然后,当您更新文本时,如果已设置该标志,则保留该文本。

假设您不希望以某种方式合并文本,请在辞职时未进行任何编辑的情况下将文本刷新为模型值,否则将更改写回到模型中。