2015-07-23 17 views
6

Tôi muốn gửi tin nhắn nhanh đến ứng dụng iOS từ ứng dụng đồng hồ. Thực hiện đoạn mã sau trong phiên bản XCode7 beta 4 và giữ ứng dụng ở nền trước trong cả hai trình mô phỏng. đây là đoạn code tôi thực hiện'isReachable' là sai khi gửi tin nhắn từ ứng dụng đồng hồ đến ứng dụng iOS

Trong watchkit interfaceController

 

    -(void)willActivate 
    { 
     [super willActivate]; 
     if ([WCSession isSupported]) { 
      WCSession *session = [WCSession defaultSession]; 
      session.delegate = self; 
      [session activateSession]; 
     } 
    } 

-(IBAction)buttonClicked 
{ 
    NSDictionary *applicationDict = [[NSDictionary alloc] initWithObjects:@[@"Hi"] forKeys:@[@"key"]]; 
    if([[WCSession defaultSession] isReachable]) 
    { 
     [[WCSession defaultSession] sendMessage:applicationDict 
            replyHandler:^(NSDictionary *reply) { 

             NSLog(@"%@",reply); 

            } 

            errorHandler:^(NSError *error) { 

             NSLog(@"%@",error); 

            }]; 
    } 
} 


Trong iOS lớp ứng dụng

 

    -(void)viewDidLoad 
    { 
     [super viewDidLoad]; 
     if ([WCSession isSupported]){ 
      WCSession *session = [WCSession defaultSession]; 
      session.delegate = self; 
      [session activateSession]; 
     } 
    } 


    -(void)session:(nonnull WCSession *)session 
    didReceiveMessage:(nonnull NSDictionary *)message replyHandler:(nonnull void (^)(NSDictionary * __nonnull))replyHandler 
    { 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      self.testLbl.text = [message objectForKey:@"key"]; 
      [self.view setNeedsDisplay]; 
     }); 
    } 

+1

Trên điện thoại, tôi không nghĩ rằng bạn muốn làm kích hoạt WCSession của bạn trong viewDidLoad của ViewController, bạn nên làm điều đó trong ủy nhiệm ứng dụng của bạn didFinishLaunching – CSmith

+0

@CSmith Trong tài liệu của apple, họ chưa bao giờ đề cập đến phương thức kích hoạt nên được gọi trong ủy nhiệm ứng dụng. chúng ta cần gọi trước khi gửi bất kỳ tin nhắn nào. đọc tài liệu và nhận xét. [liên kết] (https://developer.apple.com/library/prerelease/watchos/documentation/WatchConnectivity/Reference/WCSession_class/index.html#//apple_ref/occ/instm/WCSession/activateSession) – Nagendra

+0

xem Kết nối Đồng hồ Video WWDC 2015, họ nói rõ ràng bạn không nên làm những gì bạn đang làm – CSmith

Trả lời

4

Bạn phải sử dụng sendMessage API? Tôi thấy chúng không đáng tin cậy và không thể đoán trước. Tôi đã sử dụng API của applicationContext. Đồng hồ không cần phải truy cập được, nhưng nếu có, nó sẽ đến ngay lập tức, Nếu không thể truy cập được, nó sẽ được phát khi khởi chạy ứng dụng. Mỗi khi bạn cập nhật ngữ cảnh ứng dụng, nó sẽ ghi đè lên phiên bản trước đó, có thể không phải là những gì bạn đang tìm kiếm.

1

Trước tiên, bạn nên kiểm tra xem Khung kết nối đồng hồ có được liên kết chính xác hay không, cũng kiểm tra mã của bạn. Sau đó thử với "Đặt lại nội dung và cài đặt" từ cả hai mô phỏng, điều này làm việc cho tôi. Trong trường hợp nó chưa hoạt động, hãy thử gỡ cài đặt và cài đặt lại cả hai ứng dụng từ trình mô phỏng. Nếu ứng dụng vẫn không hoạt động, hãy thử xóa tiện ích ứng dụng đồng hồ khỏi cài đặt trên ứng dụng Đồng hồ được cài đặt trên điện thoại. Hi vọng điêu nay co ich!

2

Tôi tìm thấy trong một ứng dụng iPhone Tôi hiện đang làm việc trên đó tôi cần có mã kích hoạt WCSession trong cả hai AppDelegate và Trình điều khiển chế độ xem hiện tại. ...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    if ([WCSession isSupported]) { 
      WCSession *session = [WCSession defaultSession]; 
      session.delegate = self; 
      [session activateSession]; 
    } 
    ... 

Cũng giống như bạn, điều đó không lập gia đình với sự hiểu biết của tôi về những gì là phải được yêu cầu, nhưng nó là những gì đã session.reachable (Swift) để bằng đúng

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