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]; }); }
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
@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
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