我尝试使用WCSession
方法从iwatchExtension(在ButtonClick上)向iPhone应用发送消息,如
[[WCSession defaultSession] sendMessage:applicationData
replyHandler:^(NSDictionary *reply)
但委托方法
- (void)session:(WCSession *)session didReceiveMessage:
未被调用。
当我在将数据从iPhone传递到iWatch时尝试相同时,它可以正常工作。所有委托方法都在" Extension Delegate"中正确调用。类。
答案 0 :(得分:2)
如果您查看WCSession
委托方法的定义,您会发现其接收性质存在细微差别。检查粗体引用。
/ **在接收者的代表身上调用。将在启动时调用 如果传入的消息导致接收器启动。 * /
- (void)session:(WCSession *)session didReceiveMessage:(NSDictionary *)message;/ **当发送者发送一个时,在接收者的代表上调用 期待回复的消息。如果是,将在启动时调用 传入消息导致接收器启动。 * /
- (void)session:(WCSession *)session didReceiveMessage:(NSDictionary *)message replyHandler:(无效(^)(的NSDictionary * replyMessage))replyHandler;
在为replyHandler:
提供非空参数时,您应该在其他代理中接收消息,即-(void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *, id> *)message
。
您正在使用[WCSession defaultSession] sendMessage:...]进行通信,缺少委托分配以及您尚未激活会话。
在您的Extention类中,为WCSession
创建一个ivar并编写此代码
- (void)awakeWithContext:(id)context {
[super awakeWithContext:context];
// Configure interface objects here.
if([WCSession isSupported])
{
session = [WCSession defaultSession];
session.delegate = self;
[session activateSession];
}
}
然后发送消息[session sendMessage:applicationData replyHandler:^(NSDictionary *reply)
。
在AppDelegate.m
文件中,只需创建WCSession
的实例并激活它,然后使用正确的delegate
方法捕获邮件。
if([WCSession isSupported]) {
appSession = [WCSession defaultSession];
appSession.delegate = self;
[appSession activateSession];
}
我相信这可以解决你的问题。