9

アプリから文字列を受け取るために WatchConnectivity フレームワークを使用しています。アプリから Obj-C で文字列を送信する方法は次のとおりです。

-(void) viewDidLoad {

    //WATCHKIT
    WCSession* session = [WCSession defaultSession];
    session.delegate = self;
    [session activateSession];

    [self sendInfoToWatch];
}

-(void) sendInfoToWatch {

    WCSession* session = [WCSession defaultSession];
    session.delegate = self;
    [session activateSession];

    [session sendMessage:@{@"a":@"hello"} replyHandler:^(NSDictionary<NSString *,id> * _Nonnull replyMessage) {

    } errorHandler:^(NSError * _Nonnull error) {

    }];
}

私の Watch アプリは Swift です。これは私がメッセージを取得する方法です:

注:「wc session is supported」が機能し、コンソールに記録されます

override func willActivate() {
    if(WCSession.isSupported()){
        NSLog("wc session is supported")
        self.session = WCSession.defaultSession()
        self.session.delegate = self
        self.session.activateSession()
    }

    super.willActivate()
}

次の関数は呼び出されず、NSLog は表示されないため、QRCodeTitleLabel はそのテキストを更新しません。

func session(session: WCSession, didReceiveMessage message: [String : AnyObject]) {
    //recieving message from iphone

    QRCodeTitleLabel.setText(message["a"]! as? String)

    NSLog("This was called")
    NSLog((message["a"]! as? String)!)

}

このメソッドが呼び出されない理由を知っている人はいますか?

また、WatchConnectivity をインポートし、クラス名の後に WCSessionDelegate を含めました。

編集:

replyHandler を使用して関数を追加しましたが、このメソッドはまだ呼び出されていません。

func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
    QRCodeTitleLabel.setText(message["a"]! as? String)

    NSLog("This was called")
    NSLog((message["a"]! as? String)!)
}
4

2 に答える 2