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

マウント トリックは次のとおりです。

UITextField含まれているアプリに を追加し、Hiddenプロパティを設定するOnだけで、テキスト フィールドが非表示になります。

ユーザーがテーマを選択した後、呼び出すだけで、textView.becomeFirstResponder()ユーザーがテーマを選択した後にキーボードをロードしたように見えます。ユーザーが別のテーマを選択した後、呼び出しtextView.resignFirstResponder()て約 0.6 秒間待機し (NSUserDefaults が更新されるため)、再度呼び出しtextView.becomeFirstResponder()て、キーボードに新しいテーマが読み込まれます。:)

于 2014-10-03T22:51:17.700 に答える