WatchOS 2.0:WCSessionDelegate未被调用(在模拟器中)

时间:2015-08-22 20:58:14

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

我在版本7.0 beta 5上运行WatchOS 2.0。 我正在使用iWatch App运行iOS。

我设置了目标,如图所示。

enter image description here

我的iOS的ViewController和WatchKitExtension的接口控制器都激活了WCSession并设置为委托。

if ([WCSession isSupported]) {
    WCSession *session = [WCSession defaultSession];
    session.delegate = self;
    [session activateSession];
    NSLog(@"iOS App WCSession is supported");
}

然后我尝试将WatchInfo从Watch发送到iOS:

NSDictionary *userInfo = [[NSDictionary alloc]initWithObjectsAndKeys:@"testingURL", @"outputURL", nil];
        [[WCSession defaultSession] transferUserInfo:userInfo];

但我的ViewController的委托方法永远不会被调用:

- (void)session:(WCSession *)session didReceiveUserInfo:(NSDictionary<NSString *,id> *)userInfo{

dispatch_async(dispatch_get_main_queue(), ^{
    NSLog(@"Received userInfo Transferr");
    NSLog(@"%@", userInfo);
    [self.label setText:@"Received"];
});
}

我通过在此方案中按“运行”来运行模拟器中的Watch App和iOS:

enter image description here

有谁能告诉我我做错了什么?

2 个答案:

答案 0 :(得分:5)

一般来说,在UIViewcontroller中接收WCSession数据并不是一个好主意,因为你永远无法确定它是否存在。

Apple说你应该尽快开始接收。您的UIApplicationDelegate是从WCSession接收数据的好地方,也是尽早设置数据的好地方。

修改

您也不会在手表端持有对已激活会话的引用。这意味着Apple可以删除所有会话资源。

因此,您下次调用defaultSession会获得一个全新的未激活会话。

修改2

根据我的经验,在测试WatchApp Extension和iOS App之间的通信时,你必须做两件事:

  1. 从XCode 7启动WatchApp(有时我必须这样做两次)
  2. 进入iOS模拟器并手动启动iOS应用程序
  3. 可能有更多方法可以确保运行和沟通。

    还尝试从iOS App向您的WatchApp扩展程序发送消息,这对我有用。

答案 1 :(得分:0)

对我来说,当我停止在手表或iOS应用程序上接收发送事件时,我只关闭两个模拟器并让XCode再次启动它们。他们似乎只是进入了一个州。我从未在真正的手表或iOS设备上发生这种情况。