如何在通过 WatchConnectivity 接收数据后更新 WKInterfaceController / UIViewControllers
How to update WKInterfaceController / UIViewControllers after receiving data via WatchConnectivity
我在一些帖子中读到在委托而不是控制器中设置 WCWatchConnectivity 会话。您如何将委托中收到的数据传输到控制器以进行进一步处理(在 Swift 中)?
在你的委托中 class:
如果您需要更新多个视图控制器,您可以将您的委托 class 实现为单例,以便能够从您的应用程序或扩展的任何部分添加观察者(就像 Apple 对其 NSNotificationCenter class):
class WatchSessionDelegate {
static let sharedDelegate = WatchSessionDelegate()
private override init() {}
....
}
您可以定义一个观察者协议:
protocol DataObserver {
func dataDidChange(data: AnyObject)
}
然后你向你的委托添加一个观察者数组class:
private var observers = [DataObserver]()
以及添加和删除观察者的两种方法:
func addObserver(observer: DataObserver) {
// add the observer to observers
}
func removeObserver(observer: DataObserver) {
// remove the observer from observers
}
然后,当接收到数据时,您遍历观察者并调用协议中定义的方法:
func didReceiveData(data: AnyObject) {
for observer in observers {
observer.dataDidChange(data)
}
}
在你的 UIViewControllers / WKInterfaceController classes:
要通知 UIViewController 或 WKInterfaceController 有关数据更改的信息,只需使其符合 DataObserver
协议并将其添加到观察者即可:
WatchSessionDelegate.sharedDelegate.addObserver(self)
并实现协议中的方法:
func dataDidChange(data: AnyObject) {
// update UI
}
我在一些帖子中读到在委托而不是控制器中设置 WCWatchConnectivity 会话。您如何将委托中收到的数据传输到控制器以进行进一步处理(在 Swift 中)?
在你的委托中 class:
如果您需要更新多个视图控制器,您可以将您的委托 class 实现为单例,以便能够从您的应用程序或扩展的任何部分添加观察者(就像 Apple 对其 NSNotificationCenter class):
class WatchSessionDelegate {
static let sharedDelegate = WatchSessionDelegate()
private override init() {}
....
}
您可以定义一个观察者协议:
protocol DataObserver {
func dataDidChange(data: AnyObject)
}
然后你向你的委托添加一个观察者数组class:
private var observers = [DataObserver]()
以及添加和删除观察者的两种方法:
func addObserver(observer: DataObserver) {
// add the observer to observers
}
func removeObserver(observer: DataObserver) {
// remove the observer from observers
}
然后,当接收到数据时,您遍历观察者并调用协议中定义的方法:
func didReceiveData(data: AnyObject) {
for observer in observers {
observer.dataDidChange(data)
}
}
在你的 UIViewControllers / WKInterfaceController classes:
要通知 UIViewController 或 WKInterfaceController 有关数据更改的信息,只需使其符合 DataObserver
协议并将其添加到观察者即可:
WatchSessionDelegate.sharedDelegate.addObserver(self)
并实现协议中的方法:
func dataDidChange(data: AnyObject) {
// update UI
}