Chcę wysłać wiadomość błyskawiczną do aplikacji iOS z aplikacji zegarka. Zaimplementowałem następujący kod w wersji beta 4 XCode7 i utrzymując aplikację na pierwszym planie w obu symulatorach. Oto kod I wdrożone"isReachable" ma wartość false podczas wysyłania wiadomości z aplikacji do aplikacji na iOS
W 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); }]; } }
W iOS klasy
-(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]; }); }
Na telefon, ja nie myśl, że chcesz wykonywać aktywację WCSession w viewDidLoad ViewController, powinieneś zrobić to w delegacji aplikacji didFinishLaunching – CSmith
@CSmith W dokumentacji Apple, nigdy nie wspomnieli, że należy aktywować metodę aktywacji w delegacie aplikacji. musimy zadzwonić przed wysłaniem jakichkolwiek wiadomości. przeczytaj dokument i komentarz. [link] (https://developer.apple.com/library/prerelease/watchos/documentation/WatchConnectivity/Reference/WCSession_class/index.html#//apple_ref/occ/instm/WCSession/activateSession) – Nagendra
Wyświetl podgląd Łączność Wideo WWDC 2015, wyraźnie mówią, że nie należy robić tego, co robisz – CSmith