2015-09-24 8 views
7

wysłać słownik do aplikacji iOS przy użyciu:współdzielenia danych między Watch aplikacji i iOS w watchOS2

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

ale dostaję błąd z tym. Chcę wiedzieć, jak nasza aplikacja macierzysta obsługuje to żądanie w funkcji watchOS2.

W watchOS1 użyłem openParentApplication, aby pobrać dane z aplikacji nadrzędnej, a Appdelegate miał handleWatchKitExtensionRequest, aby obsłużyć to żądanie. Jak sobie z tym poradzimy w watchOS2?

My Controller Interface:

- (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

You powinno być sprawdzanie zasięgu e przed użyciem sendMessage. Jaki błąd dostałeś? – ccjensen

+0

Chcę otrzymać słownik odpowiedziHandler. Powiedz, co mam zrobić w aplikacji na iOS. Myślę, że powinniśmy użyć: - sesja (void): (nonnull WCSession *) didReceiveMessage: (nonnull NSDictionary *) message replyHandler: (nonnull void (^) (NSDictionary * __nonnull)) replyHandler daj mi przykład dla tego – PramukaD

Odpowiedz

8

Oto przykład użycia sendMessage z post:

Wysyłanie bocznej:

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

Odbieranie niepożądane:

- (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

Czy mogę otworzyć safari w iPhone'ie, gdy kliknę link w aplikacji Watch? –

+0

1. Należy oznaczyć moją odpowiedź jako właściwą, jeśli była pomocna, 2. Zadajesz teraz osobne pytanie, które prawdopodobnie powinno być jego własnym, 3. Aby na nie odpowiedzieć; nie, nie jest to możliwe, chyba że aplikacja na iOS jest na pierwszym planie w czasie – ccjensen

+0

Nie zadałem tego pytania @ccjensen. Proszę odpowiedzieć na moje pytanie, jeśli masz jakiś pomysł. http://stackoverflow.com/questions/33450521/open-safari-ios-app-from-watch-app –

Powiązane problemy