Опубликовать изменения NSUserDefaults между расширением клавиатуры iOS и приложением?

Я думал, что перепробовал все и прочитал всевозможные статьи на этом форуме. Но ничего не работает. Вот фрагмент кода и некоторые настройки:

На стороне выдвижения:

let thisDefaults = NSUserDefaults(suiteName: "group.request.com")
thisDefaults?.setObject("Hello", forKey: "prevWord")
thisDefaults?.setObject("World", forKey: "word")
let success = thisDefaults?.Synchronize()

NSNotificationCenter.defaultCenter (). PostNotificationName("ExtensionRequestChanges", объект: ноль)

На стороне приложения, содержащего:

NSNotificationCenter.defaultCenter().addObserver(self, selector:                Selector("DidReceiveRequest:", name: "ExtensionRequestChanges", 
object: nil)

func DidReceiveRequest(notification: NSNotification) {
      // Read defaults
      let thisDefaults = NSUserDefaults(suiteName: "group.request.com")
      let word = thisDefaults?.stringForKey("word")
      let prevWord = thisDefaults?.stringForKey("prevWord")
      ...
}

В настройках проекта:

. registered "group.request.com" app group to both the extension and containing app
. set "RequestOpenAccess" in NSExtensionAttributes to YES

Но моя функция DidReceiveRequest никогда не вызывалась! Зачем???

Пожалуйста помоги.

1 ответ

NSNotificationCenter работает только в том процессе, в котором работает. Расширение клавиатуры и приложение-контейнер - это отдельные процессы. Чтобы публиковать уведомления о процессах, вы должны исследовать CFNotificationCenterGetDarwinNotifyCenterВызов API, который возвращает центр уведомлений Core Foundation, который может публиковать уведомления между процессами или другими формами межпроцессного взаимодействия.

Другие вопросы по тегам