将数据从 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)
})
}
}
我正在为 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)
})
}
}