gpt4 book ai didi

ios - WatchOS 2.0 : WCSessionDelegate not get called (in Simulator)

转载 作者:可可西里 更新时间:2023-11-01 03:13:04 28 4
gpt4 key购买 nike

我在版本 7.0 beta 5 上运行 WatchOS 2.0。我正在运行带有 iWatch 应用程序的 iOS。

我如图所示设置目标。

enter image description here

我让我的 iOS 的 ViewController 和 WatchKitExtension 的界面 Controller 都激活了 WCSession 并设置为委托(delegate)。

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

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

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

但是我的 ViewController 的委托(delegate)方法从未被调用:

- (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

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

最佳答案

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

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

编辑

您也没有在 watch 端保留对您激活的 session 的引用。这意味着 Apple 可以删除所有 session 资源。

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

编辑2

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

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

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

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

关于ios - WatchOS 2.0 : WCSessionDelegate not get called (in Simulator),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32160728/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com