Swift键盘扩展更新NSUserDefaults

时间:2014-10-01 09:30:05

标签: ios ios8 ios-keyboard-extension

我正在尝试制作iOS键盘扩展程序,但是我无法将包含应用程序的数据同步/更新到扩展程序。

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

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

完美无缺。在包含应用程序中启动键盘之前,我使用它,并在键盘的viewdidLoad中检查NSUserDefault,一切正常。

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

Mt技巧是:

只需在包含的应用中添加UITextField,然后设置Hidden属性On,即可隐藏文字字段。

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