【问题标题】:Swift Keyboard Extension update NSUserDefaultsSwift 键盘扩展更新 NSUserDefaults
【发布时间】:2014-10-01 09:30:05
【问题描述】:

我正在尝试制作 iOS 键盘扩展程序,但在将数据从包含的应用程序同步/更新到扩展程序时遇到问题。

正如文档所述,我正在使用

NSUserDefaults *mySharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"com.example.domain.MyShareExtension"];
[mySharedDefaults setObject:theAccountName forKey:@"lastAccountName"];

效果很好。在包含应用程序中启动键盘之前,我使用它,并在键盘的 viewdidLoad 中检查 NSUserDefault,一切正常。

问题是,如果在我的包含应用程序中更新了我的 NSUserDefaults,我如何在我的键盘应用程序中知道 NSUserDefaults 已更新。

我试过KVO,不行。 我尝试使用 NSUserDidChangeNotification 的 NSUserDefaultsStandard 不起作用。 NSUserDefaultsStandard 根本不适用于键盘扩展。

我正在考虑在我的键盘扩展中使用 NSTimer,并每隔 X 毫秒检查一次 NSUserDefaults。但这太过分了。

我知道这是可能的,因为应用程序正在 AppStore 中执行此操作。 BrightKey 或 CoolKey 更改包含应用程序的键盘设计。 所以他们肯定有回调或其他东西来更新他们的数据。

提前感谢任何想出干净解决方案的人。

【问题讨论】:

    标签: ios ios8 ios-keyboard-extension


    【解决方案1】:

    您可以在每次加载键盘并包含应用程序时读取/写入共享用户默认值。

    【讨论】:

    • 是的,但我想这样做而不必等待加载。例如,应用程序 BrightKey 和 CoolKey 会实时更改键盘的设计,而无需重新加载它们。
    • 它们在您选择主题时显示键盘。他们在耍花招:加载键盘时,他们会在键盘识别的文本字段中输入一个非常快速的文本 id 并将其保存在本地
    • 你能再明确一点吗?键盘如何访问文本 id ?怎么现在 id 刚刚改变,所以他们可以实时上传主题?
    【解决方案2】:

    山诀是:

    只需将UITextField 添加到您的包含应用程序,并设置Hidden 属性On,这样文本字段就看不见了。

    用户选择任何主题后,只需调用textView.becomeFirstResponder(),这样您就可以在用户选择主题后加载键盘。用户选择另一个主题后,只需调用 textView.resignFirstResponder() 并等待大约 0.6 秒(因此 NSUserDefaults 更新),然后再次调用 textView.becomeFirstResponder(),您的键盘将加载新主题! :)

    【讨论】:

    • 这是我目前的伎俩。但是,如果您检查我提到的 2 个应用程序,它们不会使用该技巧,因为键盘永远不会退出。让键盘消失并在短暂延迟后回来有点难看...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 2017-05-06
    • 1970-01-01
    相关资源
    最近更新 更多