Mira la conectividad: didReceiveMessage no se llama

Estoy usando el framework WatchConnectivity para recibir una cadena de mi aplicación. Aquí es cómo envío la cadena en Obj-C desde la aplicación:

-(void) viewDidLoad { //WATCHKIT WCSession* session = [WCSession defaultSession]; session.delegate = self; [session activateSession]; [self sendInfoToWatch]; } -(void) sendInfoToWatch { WCSession* session = [WCSession defaultSession]; session.delegate = self; [session activateSession]; [session sendMessage:@{@"a":@"hello"} replyHandler:^(NSDictionary<NSString *,id> * _Nonnull replyMessage) { } errorHandler:^(NSError * _Nonnull error) { }]; } 

La aplicación My Watch está en Swift. Así es como recupero el post:

Nota: "la session wc es compatible" funciona y se registra en la console

 override func willActivate() { if(WCSession.isSupported()){ NSLog("wc session is supported") self.session = WCSession.defaultSession() self.session.delegate = self self.session.activateSession() } super.willActivate() } 

La siguiente function nunca se llama, ninguno de los NSLog aparece, por lo que QRCodeTitleLabel no actualiza su text.

 func session(session: WCSession, didReceiveMessage message: [String : AnyObject]) { //recieving message from iphone QRCodeTitleLabel.setText(message["a"]! as? String) NSLog("This was called") NSLog((message["a"]! as? String)!) } 

¿Alguien sabe por qué no se llama a este método?

Además, he importado WatchConnectivity e incluido WCSessionDelegate después del nombre de mi class.

Editar:

Agregué la function con answerHandler, pero este método aún no se llama:

 func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) { QRCodeTitleLabel.setText(message["a"]! as? String) NSLog("This was called") NSLog((message["a"]! as? String)!) } 

Solutions Collecting From Web of "Mira la conectividad: didReceiveMessage no se llama"

Hay 2 methods de session: didReceiveMessage en WCSession. Debe implementar uno con un answerHandler en el lado de Apple Watch.

Además, ¿está la pantalla de Apple Watch en? SendMessage desde el iPhone solo funcionará mientras la aplicación Apple Watch esté activa y la pantalla esté encendida. SendMessage desde Apple Watch al iPhone, por otro lado, funcionará incluso si la aplicación de iPhone no se inicia.

Si desea solicitar los datos cuando utiliza la aplicación Watch, puede cambiar la aplicación Watch para llamar al método sendMessage. La aplicación de iPhone usaría su answerHandler para enviar los datos que necesita al reloj. Si lo hace, deberá mover su código de initialization de WCSession en la aplicación de iPhone a la aplicación: método didFinishLaunchingWithOptions (ya que su controller de vista no se inicializará si se inicia en segundo plano).

 // ***On the watch*** // ExtensionDelegate func applicationDidFinishLaunching() { self.session = WCSession.defaultSession(); self.session.delegate = self self.session.activateSession() } // Where you want to get the data from the iPhone self.session.sendMessage(["retrieveData":[:]], replyHandler: { (result) -> Void in // TODO: Handle your data from the iPhone }, errorHandler: { (error) -> Void in // TODO: Handle error - iPhone many not be reachable }) // ***On the iPhone*** // AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.session = [WCSession defaultSession]; self.session.delegate = self; [self.session activateSession]; } - (void)session:(WCSession *)session didReceiveMessage:(nonnull NSDictionary<NSString *,id> *)message replyHandler:(nonnull void (^)(NSDictionary<NSString *,id> * _Nonnull))replyHandler { if ([message objectForKey:@"retrieveData"]) { replyHandler(@{@"a":@"hello"}); } }