1

我在我的 Manager 类 init 方法中编写了这段代码。

if([WCSession isSupported]) {
   WCSession *session = [WCSession defaultSession];
   session.delegate = self;
   [session activateSession];
}

此外,在管理器类中实现了这些委托方法。

- (void)session:(WCSession *)session activationDidCompleteWithState:(WCSessionActivationState)activationState error:(NSError *)error {
    if(error) {
        NSLog(@"%@", error.description);
    }

    NSLog(@"iOS App Session activated.");
}

- (void)sessionDidBecomeInactive:(nonnull WCSession *)session {
    //
}


- (void)sessionDidDeactivate:(nonnull WCSession *)session {
    //
}

- (void)sessionReachabilityDidChange:(WCSession *)session {
    //
}

Watch应用InterfaceController委托方法:

- (void)session:(WCSession *)session didReceiveApplicationContext:(NSDictionary<NSString *,id> *)applicationContext {
    //
}

我的问题是:

  1. 永远不会调用activationDidCompleteWithState 。
  2. 我正在调用 updateContext 方法将数据发送到手表应用程序,但在 InterfaceController 中从未调用过didReceiveApplicationContext方法。
4

2 回答 2

0

我得到了上述问题的解决方案。这是模拟器的问题。所以我更愿意用真机测试 Watch 应用。在使用真实设备进行测试时,我的相同代码运行良好。

于 2019-11-15T17:03:56.200 回答
0

您必须将 WCSession 对象保留在成员变量中。

@property (nonatomic, strong) WCSession* wcSession;
...

if ([WCSession isSupported])
{
    self.wcSession = [WCSession defaultSession];
    self.wcSession.delegate = self;
    [self.wcSession activateSession];
}
于 2019-11-14T10:39:14.960 回答