macOS 应用程序:不要让同步更改覆盖用户输入

macOS App: Don't Let Sync Changes Overwrite User Typing

Xcode10.1,Swift4.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()
    }

然后当你去更新文本时,如果设置了那个标志就离开它。

假设您不想以某种方式合并文本,如果您辞职时没有进行任何编辑,请将文本刷新为模型值,否则将更改写回模型。