2

我正在使用 watchOS 2 开发一个手表应用程序,它的父应用程序在 iOS 9 测试版上。我正在使用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);
}

谢谢!

4

1 回答 1

1

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

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

当接收到内容并且会话状态发生变化时,会话会调用委托方法。所有委托方法都将在同一个队列中调用。委托队列是一个非主串行队列。如有必要,客户端有责任分派到另一个队列。

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

于 2015-08-27T17:33:11.797 回答