如何通过WatchConnectivity接收数据后更新WKInterfaceController / UIViewControllers

时间:2015-10-12 15:44:59

标签: ios delegates swift2 watchconnectivity

我在一些帖子中读到了在委托而不是控制器中设置WCWatchConnectivity Session。如何将委托中收到的数据传输到控制器进行进一步处理(在Swift中)?

1 个答案:

答案 0 :(得分:1)

在您的委托类中:

如果您需要更新多个视图控制器,您可以将您的委托类实现为单例,以便能够从应用程序或扩展的任何部分添加观察者(就像Apple对其NSNotificationCenter类所做的那样):

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

您可以定义观察者协议:

protocol DataObserver {
    func dataDidChange(data: AnyObject)
}

然后将一个观察者数组添加到您的委托类:

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类中:

要通知UIViewController或WKInterfaceController数据更改,只需使其符合DataObserver协议并将其添加到观察者:

WatchSessionDelegate.sharedDelegate.addObserver(self)

并从协议实施方法:

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