WCSession en Apple Watch no funciona correctamente

Tengo XCode 7, iPhone6 ​​con iOS 9.1, Apple Watch con WatchOS 2.0 (ahora me actualizo a 2.0.1)

Trato de hacer la comunicación entre Watch y iPhone.

En iPhone, inicie mi singleton

- (instancetype)init { self = [super init]; if (self.isConnectivityAvailable) { session = [WCSession defaultSession]; session.delegate = self; [session activateSession]; } return self; } - (BOOL)isConnectivityAvailable { if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) { return [WCSession isSupported]; } else { return NO; } } 

en AppDelegate

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //custom code (void)[AppConnectivityHandler instance]; //start App connectivity with Apple Watch return YES; } 

Y todo está bien

Proceso post como ese

 - (void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *,id> *)message replyHandler:(void (^)(NSDictionary<NSString *,id> * _Nonnull))replyHandler { LOG(@"receive message"); NSString *request = message[kRequestKey]; __block NSDictionary *reply = @{}; dispatch_sync(dispatch_get_main_queue(), ^{ if ([request isEqualToString:kRequestDayInfo]) { //formirate reply dictionary } }); LOG(@"send reply"); replyHandler(reply); } 

En mi reloj comienzo a cargar cuando se llama a la function en mi controller de interfaz principal

 - (void)willActivate { [super willActivate]; if ([WatchConnectivityHandler instance].isConnectivityAvailable) { [[WatchConnectivityHandler instance] loadDayInfoWithCompletion:^(NSError * _Nullable error, WatchDayInfo * _Nullable dayInfo) { //code }]; } else { //error } } 

Mi reloj singleton

 + (nonnull instancetype)instance { static WatchConnectivityHandler *instance; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instance = [WatchConnectivityHandler new]; }); return instance; } - (instancetype)init { self = [super init]; if (self.isConnectivityAvailable) { session = [WCSession defaultSession]; session.delegate = self; [session activateSession]; } return self; } - (BOOL)isConnectivityAvailable { return [WCSession isSupported]; } - (void)loadDayInfoWithCompletion:(void(^ _Nonnull)( NSError * _Nullable error, WatchDayInfo * _Nullable dayInfo))completion { [session sendMessage:@{kRequestKey : kRequestDayInfo} replyHandler:^(NSDictionary<NSString *,id> * _Nonnull replyMessage) { NSLog(@"reply"); dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"%@", replyMessage); //custom code completion(nil, /*custom object*/); }); } errorHandler:^(NSError * _Nonnull error) { NSLog(@"error"); dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"%@", error); completion(error, nil); }); }]; } 

Así que funciona bien en la primera vez y recibo respuesta. Pero luego comienzo muchos errores como

 Error Domain=WCErrorDomain Code=7007 "WatchConnectivity session on paird device is not reachable." Error Domain=WCErrorDomain Code=7014 "Payload could not be delivenetworking." 

Pruebo en Watch, y a menudo es un problema para get la respuesta de mi iPhone, espera un largo rato. Pero en el iPhone pruebo que cuando recibe un post de Watch, envía una respuesta muy rápida, pero no veo esa respuesta en Watch.

Necesito actualizar mi información cada vez que veo iniciar mi aplicación. ¿Cuál es el problema? Tal vez no uso las funciones apropiadas?

Use el método transeruserinfo en lugar de sendmessage y use el método didreceiveuserinfo en lugar de didreceiveapplicationcontext.