我在版本7.0 beta 5上运行WatchOS 2.0。 我正在使用iWatch App运行iOS。
我设置了目标,如图所示。
我的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:
有谁能告诉我我做错了什么?
答案 0 :(得分:5)
一般来说,在UIViewcontroller中接收WCSession数据并不是一个好主意,因为你永远无法确定它是否存在。
Apple说你应该尽快开始接收。您的UIApplicationDelegate是从WCSession接收数据的好地方,也是尽早设置数据的好地方。修改强>
您也不会在手表端持有对已激活会话的引用。这意味着Apple可以删除所有会话资源。
因此,您下次调用defaultSession会获得一个全新的未激活会话。
修改2
根据我的经验,在测试WatchApp Extension和iOS App之间的通信时,你必须做两件事:
可能有更多方法可以确保运行和沟通。
还尝试从iOS App向您的WatchApp扩展程序发送消息,这对我有用。
答案 1 :(得分:0)
对我来说,当我停止在手表或iOS应用程序上接收发送事件时,我只关闭两个模拟器并让XCode再次启动它们。他们似乎只是进入了一个州。我从未在真正的手表或iOS设备上发生这种情况。