2015-09-24 21 views
7

mando un dizionario per un app iOS utilizzando:Condividere i dati tra l'orologio app e iOS in watchOS2

- (void)sendMessage:(NSDictionary<NSString *, id> *)message 
    replyHandler:(nullable void (^)(NSDictionary<NSString *, id> *replyMessage))replyHandler 
    errorHandler:(nullable void (^)(NSError *error))errorHandler; 

ma sto ottenendo un errore con questo. Voglio sapere in che modo la nostra app principale gestisce questa richiesta in watchOS2.

In watchOS1, ho utilizzato openParentApplication per ottenere dati dall'app padre e Appdelegate ha avuto un handleWatchKitExtensionRequest per gestire tale richiesta. Come gestiamo questo in watchOS2?

mio interfaccia controller:

- (void)awakeWithContext:(id)context 
{ 
    [super awakeWithContext:context]; 
    if([WCSession isSupported]) 
    { 
    self.watchSession = [WCSession defaultSession]; 
    self.watchSession.delegate = self; 
    [self.watchSession activateSession]; 
    } 
    [self sendRequestWithActionType:@"InitialView"]; 
} 

-(void)sendRequestWithActionType:(NSString *)action 
{ 
    NSDictionary *requst = @{@"request":action}; 
    [[WCSession defaultSession] sendMessage:requst 
          replyHandler:^(NSDictionary *replyHandler) { 
           [self setTextForLabelWithData:[replyHandler valueForKey:@"response"]]; 
          } 
          errorHandler:^(NSError *error) { 
           NSLog(@""); 
          } 
]; 
} 
+1

È dovrebbe essere il controllo reachabl e prima di usare sendMessage. Che errore ottieni? – ccjensen

+0

Voglio ottenere rispostaHandler dictionary.tell me cosa dovrei fare in app iOS.Penso, dovremmo usare - sessione (nullo): (noncontenuta WCSession *) session didReceiveMessage: (nonnull NSDictionary *) messaggio replyHandler: (nonnull void (^) (NSDictionary * __nonnull)) replyHandler dammi un esempio per questo – PramukaD

risposta

8

Ecco un esempio di utilizzo sendMessage con una risposta:

lato invio:

-(void)sendRequestWithActionType:(NSString *)action { 
    NSDictionary *request = @{@"request":action}; 
    [[WCSession defaultSession] sendMessage:request 
         replyHandler:^(NSDictionary *replyHandler) { 
          [self setTextForLabelWithData:[replyHandler valueForKey:@"response"]]; 
         } 
         errorHandler:^(NSError *error) { 
          NSLog(@""); 
         }]; 
} 

Ricezione lato:

- (void)session:(nonnull WCSession *)session didReceiveMessage:(NSDictionary<NSString *,id> *)message replyHandler:(void(^)(NSDictionary<NSString *,id> *))replyHandler { 
    NSString *action = message[@"request"]; 
    NSString *actionPerformed; 
    if ([action isEqual:@"foo"]) { 
     // do "foo" stuff 
     actionPerformed = @"foo done"; 
    } else if ([action isEqual:@"bar"]) { 
     // do "bar" stuff 
     actionPerformed = @"bar done"; 
    } 
    replyHandler(@{@"actionPerformed":actionPerformed}); 
} 
+0

E 'possibile aprire il safari in iPhone quando clicco su qualche link in Watch Application? –

+0

1. Dovresti contrassegnare la mia risposta come quella giusta se ti è stata d'aiuto, 2. Ora stai facendo una domanda separata che dovrebbe probabilmente essere la sua, 3. Rispondere ad essa; no, non è possibile a meno che l'app per iOS non sia in primo piano in quel momento – ccjensen

+0

Non ho fatto questa domanda a @ccjensen. Per favore, rispondi alla mia domanda se hai qualche idea. http://stackoverflow.com/questions/33450521/open-safari-ios-app-from-watch-app –

Problemi correlati