2

我正在尝试制作 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 更改包含应用程序的键盘设计。所以他们肯定有回调或其他东西来更新他们的数据。

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

4

2 回答 2

0

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

于 2014-10-03T02:52:51.837 回答
0

技巧是:

只需将 a 添加UITextField到您的包含应用程序,并设置Hidden属性On,因此文本字段是不可见的。

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

于 2014-10-03T22:51:17.700 回答