iOS アプリがあり、AppleWatch でその拡張機能をプログラムしました。transferUserInfo メソッドを使用して、appleWatch 拡張機能にデータ (NSDictionary) を送信しています。シミュレーターではすべてが機能しますが、実際のデバイスでアプリケーションを実行しようとすると、iPhone がデータを送信しているにもかかわらず、iWatch が何も受信していないようです (送信者側をデバッグしたときにこの原因が見つかりました)。
両側で WCSession を構成しました。データを受信するクラスで WCSessionDelegate を適合させました。私は session:didReceiveUserInfo: メソッドを使用して ExtensionDelegate でデータを受信していますが、シミュレーターではすべて正常に動作すると言ったように、実際のデバイスでは何も転送されていません。
誰が問題が何であるかの手がかりを持っていますか?
コードは次のとおりです。送信者側で:
私のクラス MensaViewController.m 内
- (void)viewDidLoad
if ([WCSession isSupported]) {
session = [WCSession defaultSession];
session.delegate = self;
[session activateSession];
}
NSLog(@"A dish is being sent");
[session transferUserInfo:dishDictionary];
}
ishDictionary は viewDidLoad メソッド内で宣言され、データが含まれています。
レシーバー側 (Watch Extension) で WCSession を構成し、次のように ExtensionDelegate.m でデータを受信します。
- (void)applicationDidBecomeActive {
if ([WCSession isSupported]) {
session = [WCSession defaultSession];
session.delegate = self;
[session activateSession];
NSLog(@"Session activated in iWatch");
}
}
そして、私はデータを受け取るためにこの方法を持っています:
- (void)session:session didReceiveUserInfo:(NSDictionary<NSString *,id> *)userInfo{
NSLog(@"Received data from the iPhone");
NSArray<NSString*> *dictionaryKeys = userInfo.allKeys;
for(int i = 0; i < dictionaryKeys.count; i++){
Boolean equalsMensaString = [dictionaryKeys[i] isEqualToString:@"beilagen"];
if(equalsMensaString)
[self handleTransferredDish:userInfo];
Boolean equalsNewsString = [dictionaryKeys[i] isEqualToString:@"article"];
if(equalsNewsString)
[self handleTransferredNews:userInfo];
Boolean equalsEventString = [dictionaryKeys[i] isEqualToString:@"description"];
if(equalsEventString)
[self handleTransferredEvents:userInfo];
}
}