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(运行):
谁能告诉我我做错了什么?
通常,在UIViewcontroller中接收WCSession数据不是一个好主意,因为您永远无法确定是否存在该数据。
苹果公司说您应该尽快开始接收。UIApplicationDelegate是从WCSession接收数据的好地方,也是尽早设置数据的好地方。
编辑
您也不会在表端保留对已激活会话的引用。这意味着Apple可以删除所有会话资源。
因此,您下次调用defaultSession会使您获得一个全新的未激活会话。
编辑2
以我的经验,测试WatchApp Extension和iOS App之间的通信时,您必须做两件事:
可能会有更多方法来确保两者都可以运行并且可以通信。
另外,尝试将消息从iOS App发送到WatchApp扩展,这对我有用。
| 归档时间: |
|
| 查看次数: |
2116 次 |
| 最近记录: |