【发布时间】:2014-09-27 01:37:50
【问题描述】:
我正在编写自己的自定义键盘。而且我不知道如何将我的设置包(在电话中设置)与我的键盘扩展连接,所以如果有人从电话设置中更改设置,然后打开一些文本字段来写一些我的键盘已经知道的内容,而不是他所做的更改设置。我尝试创建应用程序组以将我的应用程序与我的扩展程序连接起来,并在我的视图控制器中为NSUserDefaultsDidChangeNotification 添加观察者,例如:
var notificationCenter = NSNotificationCenter.defaultCenter()
notificationCenter.addObserver(self, selector: "settingsDidChange:", name: NSUserDefaultsDidChangeNotification, object: nil)
当有人对设置进行更改时,将调用 settingsDidChange: 方法,并且我正在设置我需要读取的所有内容到我的应用程序组中,以便从我的扩展程序中读取它。但是只有当人们打开我的应用程序时才会调用此方法,因此如果有人从手机设置更改设置并且不会打开应用程序,我的键盘将不会改变。那么如何为我的键盘实现我的设置包?
【问题讨论】:
-
键盘扩展似乎有问题不听
NSUserDefaultsDidChangeNotification。我有同样的问题。容器应用程序写入 userDefaults,键盘扩展正确读取它,但NSNotificationCenter和NSUserDefaults的addObserver都没有在这里工作。这对我们这里来说是一个严重的问题。 -
@bauerMusic 你有没有解决这个问题?
-
不。但是,我想我可以不用(暂时),因为每当键盘再次出现时,它都会从更新的
userDefaults中读取。重读您的帖子,我相信您的问题是从 iPhone 的 设置写入userDefaults没有生效?如果是这样,它与通知无关。我的问题是没有任何通知 KVO 起作用。userDefaults被写入,但没有一个听众被调用。阅读用户将代码从工作扩展(非键盘)复制/粘贴到键盘并且通知停止工作的类似投诉。 -
对于仍在寻找解决方案的任何人:stackoverflow.com/questions/25121071/… 有一个要点示例,说明如何接收应用程序和扩展程序之间的 NSUserDefaults 更改的通知。关键是使用达尔文通知
标签: ios swift ios8 ios-app-extension custom-keyboard