アプリから文字列を受け取るために 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)!)
}