gpt4 book ai didi

ios - WatchConnectivity - 检测所有 Controller 中的应用程序上下文更改

转载 作者:行者123 更新时间:2023-11-28 19:43:46 25 4
gpt4 key购买 nike

我正在尝试从 iOS -> Watch 发送数据,当事件 Controller 实现了 didReceiveApplicationContext 时,这工作正常。我可以接收上下文对象并且一切正常。

但是,我不清楚如何“全局”实现 didReceiveApplicationContext,以便 Watch 从 iOS 捕获上下文数据更改,而不管用户使用哪个 Controller 。我有几个用户可以在其中导航的 Controller ,因此当它们位于没有此委托(delegate)方法的 Controller 上时,不会捕获任何数据。

我尝试将此委托(delegate)方法添加到 ExtensionDelegate.m 以尝试在全局范围内捕获来自 iOS 的数据,但当我尝试输出到日志时它似乎没有捕获任何内容。

我假设有一种方法可以实现这一点,而无需在每个 Watch Controller 中实现 didReceiveApplicationContext

谢谢

最佳答案

您可以创建一个委托(delegate)类来监听新数据,然后将新数据通知所有感兴趣的接口(interface) Controller 。如果你有多个接口(interface) Controller 需要在新数据到达时更新,你可以将这个委托(delegate)实现为单例,以便能够从你的扩展的任何部分添加观察者(就像 Apple 对其 NSNotificationCenter 类所做的那样):

class SessionDelegate {
static let sharedDelegate = SessionDelegate()
private override init() {}
....
}

定义一个所有感兴趣的接口(interface) Controller 都可以实现的观察者协议(protocol):

protocol DataObserver {
func dataDidChange(data: AnyObject)
}

将一个观察者数组添加到您的委托(delegate)类中,并添加两个方法来添加和删除观察者:

private var observers = [DataObserver]()

func addObserver(observer: DataObserver) {
// add the observer to observers
}

func removeObserver(observer: DataObserver) {
// remove the observer from observers
}

当您收到新数据时,遍历观察者并调用协议(protocol)中定义的方法:

func didReceiveData(data: AnyObject) {
for observer in observers {
observer.dataDidChange(data)
}
}

现在所有需要刷新的 WKInterfaceController 类都可以将自己添加为观察者:

SessionDelegate.sharedDelegate.addObserver(self)

并实现协议(protocol)中的方法:

func dataDidChange(data: AnyObject) {
// update UI
}

最后,您必须通知您的委托(delegate)类新数据已到达,以便它可以通知其观察者。因此,在您的 ExtensionDelegate 中实现 didReceiveApplicationContext 并在您的委托(delegate)类上调用 dataDidChange:

extension ExtensionDelegate: WCSessionDelegate {
func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) {
SessionDelegate.sharedDelegate.dataDidChange(applicationContext)
}
}

关于ios - WatchConnectivity - 检测所有 Controller 中的应用程序上下文更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33310170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com