今天,我开始在Watch OS框架上乱搞,想把一个快速的应用程序放在一起,但我提出了几个问题。
我制作了一个iOS应用程序,它只显示当前电池的%以及电池的状态。然后我想在手表上展示一下。
我是怎么安排这件事的-
在iOS应用程序中,在viewDidLoad方法中,我启动会话。
if ([WCSession isSupported]) {
wcSession = [WCSession defaultSession];
wcSession.delegate = self;
[wcSession activateSession];
}然后调用我的方法来更新实际的电池%和状态。在这个方法中,我有一个将信息发送给手表的方法:
NSDictionary *message = @{
@"message" : [NSString stringWithFormat:@"%@", [numberFormatter stringFromNumber:levelObj]],
@"message_2" : [NSString stringWithFormat:@"%ld",(long)[UIDevice currentDevice].batteryState],
};
[wcSession sendMessage:message replyHandler:nil errorHandler:^(NSError * _Nonnull error) {
NSLog(@"%@", error.localizedDescription);
}];我在viewDidAppear中也调用了同样的方法,所以我不需要完全重新启动应用程序,就可以刷新相应的手表。
在监视端,我有与viewWillActivate端相同激活的iOS方法,以及处理手表应用程序从iOS端接收到的东西的方法。但是只有当我完全重新启动iOS应用程序时,它才会更新。
- (void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *,id> *)message {
NSLog(@"Message recieved!");
[_batteryLevelLabelW setText:message[@"message"]];
}还有处理电池状态消息的代码,它有点长。
我希望我提供了大量的信息来帮助你。
发布于 2017-04-02 14:37:04
根据文档的说法:
使用
sendMessage(_:replyHandler:errorHandler:)或sendMessageData(_:replyHandler:errorHandler:)方法将数据传输到可访问的对应方。这些方法用于您的iOS应用程序和WatchKit扩展之间的即时通信。isReachable属性当前必须为真,才能使这些方法成功。
如果watchapp不是前台,由于isReachable是假的,消息将不会被传递。
方法您应该使用的是updateApplicationContext(_:) -它将等待直到手表应用程序将打开的前景,只有那时才会交付。
https://stackoverflow.com/questions/43158651
复制相似问题