2015-09-24 25 views
7

tôi gửi một cuốn từ điển để một ứng dụng iOS sử dụng:Chia sẻ dữ liệu giữa các ứng dụng và xem ứng dụng iOS trong watchOS2

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

nhưng tôi nhận được một lỗi với điều này. Tôi muốn biết cách ứng dụng gốc của chúng tôi xử lý yêu cầu này trong watchOS2.

Trong watchOS1, tôi đã sử dụng openParentApplication để nhận dữ liệu từ ứng dụng gốc và Appdelegate có số handleWatchKitExtensionRequest để xử lý yêu cầu đó. Làm thế nào để chúng ta xử lý điều này trong watchOS2?

My Interface 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

Bạn nên kiểm tra reachabl e trước khi sử dụng sendMessage. lỗi gì bạn nhận được? – ccjensen

+0

Tôi muốn nhận được trả lờiHandler từ điển.tôi tôi nên làm gì trong ứng dụng iOS.Tôi nghĩ rằng, chúng ta nên sử dụng - (void) phiên: (nonnull WCSession *) session didReceiveMessage: (nonnull NSDictionary *) message replyHandler: (nonnull void (^) (NSDictionary * __nonnull)) replyHandler cho tôi một ví dụ cho – PramukaD

Trả lời

8

Dưới đây là một ví dụ của việc sử dụng SendMessage với bài trả lời:

Sending phụ:

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

Tiếp nhận phụ:

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

Có thể mở safari trong iPhone khi tôi nhấp vào một số liên kết trong ứng dụng đồng hồ không? –

+0

1. Bạn nên đánh dấu câu trả lời của tôi là câu trả lời đúng nếu nó hữu ích cho bạn, 2. Bạn hiện đang hỏi một câu hỏi riêng có lẽ nên là câu hỏi riêng của mình, 3. Để trả lời câu hỏi đó; không, điều đó là không thể, trừ khi ứng dụng iOS là tiền cảnh tại thời điểm đó trong thời gian – ccjensen

+0

Tôi đã không hỏi câu hỏi này @ccjensen. Vui lòng trả lời câu hỏi của tôi nếu bạn có bất kỳ ý tưởng nào. http://stackoverflow.com/questions/33450521/open-safari-ios-app-from-watch-app –

Các vấn đề liên quan