0

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

在扩展方面:

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)

在包含应用程序方面:

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 函数似乎从未被调用过!为什么???

请帮忙。

4

1 回答 1

0

NSNotificationCenter仅在其运行的进程中有效。您的键盘扩展和容器应用程序是独立的进程。要发布进程间通知,您应该调查CFNotificationCenterGetDarwinNotifyCenterAPI 调用,它返回一个 Core Foundation 通知中心,可以在进程之间发布通知,或其他形式的进程间通信。

于 2016-02-05T05:34:21.830 回答