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

问题描述 投票:2回答:1

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

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

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

这是我放在一起模拟问题的演示Mac应用程序。如果您开始在该字段中输入,则每10秒对该字段进行更新:https://d.pr/f/8iXjqx

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

如果有光标存在,有没有办法告诉NSTextField不更新?我是否必须在每次击键时将值保存到本地数据库,然后在同步发生时以某种方式进行合并?

macos cocoa nstextfield appkit
1个回答
1
投票

在你的textFields中,我会发现你是否活跃:

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

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

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

假设您不希望以某种方式合并文本,如果在您退出时未进行任何编辑,则将文本刷新到模型值,否则将更改写回模型。

© www.soinside.com 2019 - 2024. All rights reserved.