在iOS键盘扩展和包含应用程序之间发布NSUserDefaults更改?

时间:2016-02-05 04:25:27

标签: ios swift nsuserdefaults nsnotifications ios-keyboard-extension

我以为我已经尝试了所有内容并阅读了本论坛中所有可能的文章。但似乎没有任何效果。以下是一些代码段和一些设置:

在扩展方面:

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”,object:nil)

在Containingg app方面:

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 个答案:

答案 0 :(得分:0)

NSNotificationCenter仅适用于其运行的过程。您的键盘扩展程序和容器应用程序是单独的进程。要发布进程间通知,您应该调查CFNotificationCenterGetDarwinNotifyCenter API调用,该调用将返回可以在进程之间发布通知或其他形式的进程间通信的Core Foundation通知中心。