' isReachable'从观看应用程序向iOS应用程序发送消息时出错

时间:2015-07-23 09:39:29

标签: ios watchkit apple-watch

我想通过观看应用向iOS应用发送即时消息。在XCode7 beta 4版本中实现了以下代码,并在两个模拟器中保持应用程序的前景。这是我实施的代码

在watchkit interfaceController中


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

-(IBAction)buttonClicked
{
    NSDictionary *applicationDict = [[NSDictionary alloc] initWithObjects:@[@"Hi"] forKeys:@[@"key"]];
    if([[WCSession defaultSession] isReachable])
    {
        [[WCSession defaultSession] sendMessage:applicationDict
                                   replyHandler:^(NSDictionary *reply) {

                                       NSLog(@"%@",reply);

                                   }

                                   errorHandler:^(NSError *error) {

                                       NSLog(@"%@",error);

                                   }];
    }
}


在iOS应用程序类


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


    -(void)session:(nonnull WCSession *)session 
    didReceiveMessage:(nonnull NSDictionary *)message replyHandler:(nonnull void (^)(NSDictionary * __nonnull))replyHandler 
    {
        dispatch_async(dispatch_get_main_queue(), ^{
            self.testLbl.text = [message objectForKey:@"key"];
            [self.view setNeedsDisplay];
        });
    }

3 个答案:

答案 0 :(得分:4)

您是否必须使用sendMessage API?我发现它们不可靠且不可预测。我最终使用了applicationContext API。手表不一定是可以访问的,但如果是,它会立即到达,如果无法访问,它会在应用程序启动时传递。每次更新应用程序上下文时,它都会覆盖以前的版本,这可能不是您要查找的版本。

答案 1 :(得分:3)

我在目前正在处理的iPhone应用程序中找到了我需要在中的WCSession激活码 AppDelegate和当前的View Controller。 ......

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    if ([WCSession isSupported]) {
            WCSession *session = [WCSession defaultSession];
            session.delegate = self;
            [session activateSession];
    }
    ...

和你一样,这与我对所谓的所需的理解不相符,但它是让session.reachable(Swift)等于真的

答案 2 :(得分:1)

首先,您应该检查Watch Connectivity Framework是否正确链接,还要检查您的代码。之后尝试使用两个模拟器中的“重置内容和设置”,这对我有用。如果它还没有工作,请尝试从模拟器卸载并重新安装这两个应用程序。如果仍然无效,请尝试从手机上安装的Watch应用中的设置中删除watch app扩展程序。希望这可以帮助!