7

私は自分のカスタムキーボードを書いています。そして、設定バンドル(電話の設定)をキーボード拡張機能に接続する方法がわからないので、誰かが電話の設定から設定を変更した後、テキストフィールドを開いて、彼が行った変更よりもキーボードがすでに知っていることを書き込んだ場合設定。アプリケーションを拡張機能に接続するアプリ グループを作成しようとしましたが、View Controller に次のNSUserDefaultsDidChangeNotificationようなオブザーバーを追加しました。

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

誰かが設定に変更を加えると、settingsDidChange: メソッドが呼び出され、拡張機能から読み取るためにアプリ グループに読み込む必要があるすべてのものを設定します。ただし、このメソッドはアプリケーションを開いたときにのみ呼び出されるため、誰かが電話の設定から設定を変更してアプリケーションを開かない場合、キーボードは変更されません。では、キーボードの設定バンドルを実装するにはどうすればよいですか?

4

3 に答える 3

1

私はまだキーボード拡張機能を使ったことがありませんが、Today と WatchKit 拡張機能の両方で同様の問題に遭遇しました。変更を行った同じプロセス内のNSUserDefaultsDidChangeNotification唯一の投稿。そのため、iPhone アプリ設定内の変更は、拡張プロセスのオブザーバーへの通知をトリガーしません。

ただし、Darwin 通知 ( CFNotificationCenterGetDarwinNotifyCenter) は他のプロセスに送信されます。

NSUserDefaultsDidChangeNotificationこれは、iPhoneアプリ内でキャッチし、拡張機能のDarwin通知を投稿し、拡張機能内でキャッチし、最終的NSNotificationに使いやすいよう に標準に変換する要点です: https://gist.github.com/phatblat/f640416c15e11b685511

Darwin 通知では何も送信できないため、アプリ グループをプロビジョニングし、アプリ グループ識別子を使用してインスタンスをuserInfo立ち上げる必要があることに注意してください。NSUserDefaultsinitWithSuiteName:

于 2015-02-05T19:04:42.420 に答える
0

デバイスでもiOS 8.0.2のバグのようです(iPad Airでテストしました)。カスタム キーボード設定は保存されず、拡張機能から読み取ることができません。

ここで説明されているフルアクセスを必要とするソリューション: https://stackoverflow.com/a/26172466/840742

于 2014-10-11T12:17:29.413 に答える