我已在swift文件中声明了通知名称,该文件的目标成员包括主应用程序和今日小部件:

let SpecialKey = Notification.Name("howLongNotif")

然后在我的主应用程序视图控制器中,当位置更新时,我将发布通知(位置更新的后台模式打开):
NotificationCenter.default.post(name: SpecialKey, object: nil, userInfo: nil)

在我的“今日”窗口小部件viewDidLoad中,我是这样观察的:
NotificationCenter.default.addObserver(self, selector: #selector(TodayViewController.dataReceived), name: SpecialKey, object: nil)

并拥有:
func dataReceived(_notification: NSNotification) {
    print("data received")
}

但是,dataReceived函数从未被调用。
我通过将observer和dataReceived功能移到主应用程序进行了测试,在那里运行良好。

最佳答案

您的主应用程序和今天的扩展程序在电话上作为单独的进程运行。NSNotificationCenter仅在一个进程内有效。
要在扩展名和主应用程序之间传递信息,可以使用NSUserDefaults或共享容器中的文件。

关于swift - 从主应用发布的今日小部件中的观察通知,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45986695/

10-12 03:35