WatchOS 2.0:WCSessionDelegate没有被调用(在Simulator中)

Joh*_*ohn 8 objective-c ios apple-watch watchkit watchos-2

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

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

在此处输入图片说明

我的iOS的ViewController和WatchKitExtension的Interface Controller都已激活WCSession并被设置为委托。

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

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

NSDictionary *userInfo = [[NSDictionary alloc]initWithObjectsAndKeys:@"testingURL", @"outputURL", nil];
        [[WCSession defaultSession] transferUserInfo:userInfo];
Run Code Online (Sandbox Code Playgroud)

但是我的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"];
});
}
Run Code Online (Sandbox Code Playgroud)

我从模拟器中同时运行Watch App和iOS,方法是按以下方案中的Run(运行):

在此处输入图片说明

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

Ger*_*tan 5

通常,在UIViewcontroller中接收WCSession数据不是一个好主意,因为您永远无法确定是否存在该数据。

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

编辑

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

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

编辑2

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

  1. 从XCode 7启动WatchApp(有时我必须做两次)
  2. 进入iOS模拟器并手动启动iOS应用

可能会有更多方法来确保两者都可以运行并且可以通信。

另外,尝试将消息从iOS App发送到WatchApp扩展,这对我有用。