Опубликовать изменения 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, который может публиковать уведомления между процессами или другими формами межпроцессного взаимодействия.