Как реализовать набор настроек для пользовательской клавиатуры?

Я пишу свою собственную клавиатуру. И я не знаю, как подключить свой набор настроек (настройка в телефоне) с помощью расширения клавиатуры, поэтому, если кто-то изменит настройки из настроек телефона и после этого откройте какое-либо текстовое поле, чтобы написать что-то, о чем моя клавиатура уже знала, чем изменения, которые он сделал в настройки. Я попытался создать группу приложений для подключения моего приложения к моему расширению, и, по моему мнению, контроллер добавляет наблюдателя для NSUserDefaultsDidChangeNotification что-то вроде:

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

Когда кто-то вносит изменения в настройки settingsDidChange: будет вызываться метод, и я устанавливаю все, что мне нужно, чтобы прочитать в моей группе приложений, чтобы прочитать его из моего расширения. Но этот метод будет вызван только тогда, когда человек откроет мое приложение, поэтому, если кто-то изменит настройку из настроек телефона и не откроет приложение, моя клавиатура не изменится. так как я могу реализовать свой набор настроек для моей клавиатуры?

Я еще не работал с расширением клавиатуры, но столкнулся с аналогичной проблемой с расширением Today и WatchKit. NSUserDefaultsDidChangeNotification сообщения только в том же процессе, который внес изменения. Таким образом, изменение внутри настроек приложения iPhone не вызывает это уведомление наблюдателям в процессе расширения.

Однако уведомления Darwin ( CFNotificationCenterGetDarwinNotifyCenter ) CFNotificationCenterGetDarwinNotifyCenter сообщения другим процессам.

Вот суть улавливания NSUserDefaultsDidChangeNotification внутри приложения iPhone, размещение уведомления Darwin для расширений, улавливание его внутри расширения и, наконец, преобразование его в стандартную NSNotification для более легкого использования: https://gist.github.com/phatblat / f640416c15e11b685511

Обратите внимание, что вы не можете отправить какую-либо userInfo в уведомление Darwin, поэтому вам все равно необходимо предоставить группу приложений и создать экземпляр NSUserDefaults с NSUserDefaults initWithSuiteName: с вашим идентификатором группы приложений.

В своем class KeyboardViewController: UIInputViewController самой клавиатуры, вы должны добавить код уведомления, который вы написали. Где вы сейчас пишете?

Подкласс UIInputViewController работает, когда используется клавиатура, а не только при запуске приложения. Также вы можете просто загружать материал NSUserDefaults внутри UIInputViewController каждый раз, когда загружается представление, и таким образом вы избегаете использования уведомлений. По сути, вы выбираете настройки каждый раз при загрузке клавиатуры. В зависимости от того, сколько у вас настроек, это может быть или не быть оптимальным.

Кажется, это ошибка в iOS 8.0.2 даже на устройстве (я тестировал iPad iPad). Пользовательские настройки клавиатуры не сохраняются и не могут быть прочитаны из расширения.

Решение, требующее полного доступа, описано здесь: https://stackoverflow.com/a/26172466/840742

  • Как вызвать инициализатор Swift (который имеет параметр) из Objective-C?
  • Рекомендации по созданию прямоугольных кнопок для iOS
  • Изменение рамки кадра во время выполнения
  • Swift - как получить последние 3 фотографии из библиотеки фотографий?
  • Как сделать кнопку вспышкой или мигать?
  • Отключение вертикальной прокрутки в UIScrollView в swift?
  • Захват изображения / скриншота SCNView с использованием SCNNode: drawViewHierarchyInRect afterScreenUpdates не работает
  • Утечка памяти при настройке атрибутаText на 2 ярлыка в Swift
  • AVMutableComposition - только воспроизведение первой дорожки (Swift)
  • Eroor Использование NSPredicate с блоками в Swift «Не удалось найти перегрузку для« init », которая принимает предоставленные аргументы»
  • UIImagePickerController: didFinishPickingMediaWithInfo не вызывается
  • Interesting Posts

    iOS 8 – Не удается установить корпоративное приложение

    слабый может применяться только к типам классов и классов, не относящимся к << errortype >>

    Совместное использование стека основных данных и данных между приложениями и расширениями в iOS8

    генерировать общий секретный ключ в iTunes Connect для покупки приложения?

    Xamarin iOS 7: Не удалось связать родную связь

    iOS – поддерживает ли AVFoundation 3D-штрих-коды?

    Прокрутка страницы не работает с включенным автозапуском

    Преобразование вида из пейзажа в портрет?

    Как преобразовать аудио с помощью cocoalibspotify?

    Как обновить или вставить с помощью SQLite.swift

    Как безопасно использовать `_Nullable` для` _Nonnull` в Objective-C?

    Как заставить удалять-удалять работу, когда свойство tableView позволяет использовать свойство MultipleSelectionDuringEditing ДА?

    Создание нового устройства для разработки Xcode

    Как я могу исправить ошибку установки Realm для swift 2.0?

    Как я могу ввести проверку CGColor / CGPath?

    Давайте будем гением компьютера.