使用Swift将Apple Watch的数据同步到iPhone

时间:2015-11-16 10:45:37

标签: ios swift apple-watch watch-os-2 watchconnectivity

我正在为iOS和Apple手表编写应用程序,需要在Apple手表和iPhone之间同步数据。

我这样做是为了将数据从iPhone发送到像这里提到的苹果手表:http://telliott.io/2015/08/11/how-to-communicate-between-ios-and-watchos2.html

另一方面,如果我更改我的手表应用程序上的数据并将更新的数据发送到我的iPhone,如果收到消息的ViewController打开,则会发出一个奇怪的警告。当它关闭并从我的手表发送更新的数据时,我的控制台上没有警告,如果我打开ViewController,数据会更新:

func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]){
    if(WCSession.isSupported()){
        self.prefs = Utils().importDataFromSession(prefs, applicationContext: applicationContext)
        initializeGUI(true)

    }
}

任何人都可以帮我解决这个奇怪的警告吗?

这是我收到消息的方法

if(!isset($_SESSION)) 
{ 
    session_start(); 
}

1 个答案:

答案 0 :(得分:1)

WCSession标题说:

/** ----------------------------- WCSessionDelegate -----------------------------
 *  The session calls the delegate methods when content is received and session
 *  state changes. All delegate methods will be called on the same queue. The
 *  delegate queue is a non-main serial queue. It is the client's responsibility
 *  to dispatch to another queue if neccessary.
 */

因此,如果您想更新UI,您需要确保代码在应用程序的主线程上运行;因此,对您的代码进行以下更改,警告将消失:

func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]){
    if (WCSession.isSupported()) {
        self.prefs = Utils().importDataFromSession(prefs, applicationContext: applicationContext)
        dispatch_async(dispatch_get_main_queue(), {
            initializeGUI(true)
       })
    }
}