将数据从 Apple Watch 同步到 iPhone 和 Swift

Synchronising data from Apple Watch to iPhone with Swift

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

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

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

,数据就会更新
2015-11-16 11:28:19.057 GeoSocialRecommender[286:11448] This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes.  This will cause an exception in a future release.
 Stack:(
0   CoreFoundation                      0x0000000182410f60 <redacted> + 148
1   libobjc.A.dylib                     0x0000000196fc3f80 objc_exception_throw + 56
2   CoreFoundation                      0x0000000182410e90 <redacted> + 0
3   Foundation                          0x000000018342f2d8 <redacted> + 88
4   Foundation                          0x00000001832b5a1c <redacted> + 56
5   Foundation                          0x00000001832b15dc <redacted> + 260
6   UIKit                               0x0000000187aab8c4 <redacted> + 64
7   UIKit                               0x0000000187aac3dc <redacted> + 244
8   UIKit                               0x000000018820b1e4 <redacted> + 268
9   UIKit                               0x0000000187cb0f10 <redacted> + 176
10  UIKit                               0x000000018799f7ac <redacted> + 644
11  QuartzCore                          0x000000018719eb58 <redacted> + 148
12  QuartzCore                          0x0000000187199764 <redacted> + 292
13  QuartzCore                          0x0000000187199624 <redacted> + 32
14  QuartzCore                          0x0000000187198cc0 <redacted> + 252
15  QuartzCore                          0x0000000187198a08 <redacted> + 512
16  QuartzCore                          0x00000001871c7b0c <redacted> + 236
17  libsystem_pthread.dylib             0x00000001979f61e0 <redacted> + 584
18  libsystem_pthread.dylib             0x00000001979f5d58 <redacted> + 136
19  libsystem_pthread.dylib             0x00000001979f553c pthread_mutex_lock + 0
20  libsystem_pthread.dylib             0x00000001979f5020 start_wqthread + 4
)

谁能帮我解决这个奇怪的警告?

这是我收到消息的方法

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

    }
}

WCSession header 说:

/** ----------------------------- 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)
       })
    }
}