我正在构建一个使用共享扩展的 Mac OS 应用程序。这意味着它基本上有两个应用程序,主应用程序和共享扩展应用程序。
为了在彼此之间进行数据通信,我使用了一个共享容器套件,如下所示:
let sharedDefaults = UserDefaults.init(suiteName: "com.myapp.sharedsuite")
let existingData = sharedDefaults?.value(forKey: "data")
sharedDefaults?.setValue("blah", forKey: "data")
这样数据共享就解决了。但是,我希望我的主应用程序在此数据更改时“侦听”。我无法使用 delegate
模式,因为这两个应用程序是分开的,彼此之间没有任何参考。 Notifications
我相信也是本地化和沙盒化的,所以我不能使用它们。
这留下了 KVO 模式,我希望在 sharedDefaults?.value(forKey: "data")
上的值发生变化时收到通知。问题是我不确定如何观察这个值,因为它不是我的主应用程序的 View Controller
类的属性。此外,数据对象可能是一个 structs
数组,而不是一个 NSObject
,我认为这是观察属性的必要条件。
任何帮助表示赞赏。谢谢