7

我正在编写自己的自定义键盘。而且我不知道如何将我的设置包(在电话中设置)与我的键盘扩展连接,所以如果有人从电话设置中更改设置,然后打开一些文本字段来写我的键盘已经知道的内容,而不是他所做的更改设置。我试图创建应用程序组以将我的应用程序与我的扩展程序连接起来,并在我的视图控制器中添加观察者,NSUserDefaultsDidChangeNotification例如:

var notificationCenter = NSNotificationCenter.defaultCenter()
        notificationCenter.addObserver(self, selector: "settingsDidChange:", name: NSUserDefaultsDidChangeNotification, object: nil)

当有人对设置进行更改时,将调用 settingsDidChange: 方法,并且我正在设置我需要读取的所有内容到我的应用程序组中以从我的扩展程序中读取它。但是只有当人们打开我的应用程序时才会调用此方法,所以如果有人从手机设置更改设置并且不会打开应用程序,我的键盘将不会改变。那么如何为我的键盘实现我的设置包?

4

3 回答 3

1

我还没有使用过键盘扩展,但是在 Today 和 WatchKit 扩展中遇到了类似的问题。NSUserDefaultsDidChangeNotification在同一过程中进行更改的唯一帖子。因此,iPhone 应用程序设置中的更改不会在扩展过程中向观察者触发该通知。

但是,达尔文通知 ( CFNotificationCenterGetDarwinNotifyCenter) 确实发布到其他进程。

这是在 iPhone 应用程序中捕获的要点,NSUserDefaultsDidChangeNotification为扩展发布 Darwin 通知,在扩展中捕获它,最后将其转换为标准NSNotification以便于使用: https ://gist.github.com/phatblat/f640416c15e11b685511

请注意,您无法userInfo在 Darwin 通知中发送任何内容,因此您仍然需要配置一个应用组并使用您的应用组标识符建立一个NSUserDefaults实例。initWithSuiteName:

于 2015-02-05T19:04:42.420 回答
0

即使在设备上(我已经在 iPad Air 上测试过),它似乎也是 iOS 8.0.2 中的一个错误。自定义键盘设置未保存,无法从扩展中读取。

此处说明需要完全访问权限的解决方案:https ://stackoverflow.com/a/26172466/840742

于 2014-10-11T12:17:29.413 回答
0

在您class KeyboardViewController: UIInputViewController的键盘本身中,您应该添加您编写的通知代码。你现在在哪里写?

它是在UIInputViewController使用键盘时运行的子类,而不仅仅是在运行应用程序时。此外,您可能只想NSUserDefaultsUIInputViewController每次加载视图时加载其中的内容,这样您就不必使用通知。本质上,您每次加载键盘视图时都会选择设置。根据您的自定义程度,这可能是最佳的,也可能不是最佳的。

于 2014-08-23T08:44:56.153 回答