我正在使用watchOS 2开发一个手表应用程序,它的父应用程序是在iOS 9 beta上。我正在使用WatchConnectivity
个会话将Apple Watch中的数据传递给iPhone。我需要在2个不同的视图控制器文件中进行会话,所以在每个视图控制器中启动新的WCSession并使用它们是否有任何问题?
基本上我正在尝试使用performSegueWithIdentifier
从一个视图控制器导航到其他视图控制器,当我将它放在viewDidLoad
中时它工作正常,但是当我把它放在会话方法中时,它开始打破,我怀疑它必须与WCSessions做点什么。
以下是我尝试导航的代码部分:
- (void)session:(nonnull WCSession *)session didReceiveMessage:(nonnull NSDictionary *)message replyHandler:(nonnull void (^)(NSDictionary * __nonnull replyMessage))replyHandler {
NSString *msg = [message objectForKey:@"msg"];
// NSDictionary* replyValues = @{@"session":@"established between phone and watch"};
if ([msg isEqualToString:@"fromWatch"]) {
isWatch = true;
[self performSegueWithIdentifier: @"startDashboardSegue" sender: self];
}
// NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
// [prefs setObject:messageFlag forKey:@"messageFlag"];
//replyHandler(replyValues);
}
谢谢!
答案 0 :(得分:1)
WCSession标头中WCSessionDelegate部分上方的注释指出:
----------------------------- WCSessionDelegate ----------------- ------------
会话在收到内容和会话时调用委托方法 国家变化。将在同一队列上调用所有委托方法。该 委托队列是非主串行队列。这是客户的责任 如果需要,可以发送到另一个队列。
因此,如果您想要更新UI(并且您正在使用UIKit),则必须在调用UI更新方法之前调度到主队列。