- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在版本 7.0 beta 5 上运行 WatchOS 2.0。我正在运行带有 iWatch 应用程序的 iOS。
我如图所示设置目标。
我让我的 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:
谁能告诉我我做错了什么?
最佳答案
通常,在 UIViewcontroller 中接收 WCSession 数据不是一个好主意,因为您永远无法确定它是否存在。
Apple 表示您应该尽快开始接收。您的 UIApplicationDelegate 是从 WCSession 接收数据的好地方,也是尽早设置它的好地方。
编辑
您也没有在 watch 端保留对您激活的 session 的引用。这意味着 Apple 可以删除所有 session 资源。
因此,您下次调用 defaultSession 会获得一个全新的未激活 session 。
编辑2
根据我的经验,在测试 WatchApp Extension 和 iOS App 之间的通信时,您必须做两件事:
可能有更多的方法来确保两者都运行并且可以通信。
也尝试从 iOS 应用向您的 WatchApp 扩展程序发送消息,这对我有用。
关于ios - WatchOS 2.0 : WCSessionDelegate not get called (in Simulator),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32160728/
我正在使用 Xcode 8。我还在使用 Swift 2.3,并将旧版build设置设置为是。我目前没有迁移到 Swift 3。我的应用程序针对 iOS 9.3。我的目标是 watchOS 2.0。 我
我正在尝试调整我的代码,从仅在前台使用 WCSessionDelegate 回调到在后台通过 handleBackgroundTasks: 接受 WKWatchConnectivityRefreshB
我尝试在现有项目中使用 WatchManager.swift。 import Foundation import WatchConnectivity class WatchManager: NSObj
我是 iOS 开发新手。我创建了一个 swift 类,如下所示: import WatchConnectivity; import HealthKit; @objc class Blah : NSOb
自从在 Xcode 8 (Beta 1) 和 Swift 3 上升级后,我在这一行中遇到错误: class CloudViewController: UIViewController, WCSessi
我刚刚使用 Xcode 8 的转换功能将 Swift 2 应用程序转换为 Swift 3。 我的代码有一个标记为WCSessionDelegate的类。 在 Swift 2 中,它编译时没有使用 se
我正在实现新的 WCSessionDelegate 方法以支持多设备配对。 - (void)session:(WCSession *)session activationDidCompleteWith
我在版本 7.0 beta 5 上运行 WatchOS 2.0。我正在运行带有 iWatch 应用程序的 iOS。 我如图所示设置目标。 我让我的 iOS 的 ViewController 和 Wat
更新到 Xcode 8 后,我的带有 WCSessionDelegate 的 Controller 会在 viewController 上带来类型为“不符合协议(protocol) WCSession
我是一名优秀的程序员,十分优秀!