多个视图控制器中的WatchConnectivity会话

时间:2015-07-18 06:14:40

标签: ios objective-c apple-watch watch-os-2

我正在使用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);
}

谢谢!

1 个答案:

答案 0 :(得分:1)

WCSession标头中WCSessionDelegate部分上方的注释指出:

  

----------------------------- WCSessionDelegate ----------------- ------------

     

会话在收到内容和会话时调用委托方法     国家变化。将在同一队列上调用所有委托方法。该     委托队列是非主串行队列。这是客户的责任     如果需要,可以发送到另一个队列。

因此,如果您想要更新UI(并且您正在使用UIKit),则必须在调用UI更新方法之前调度到主队列。