【发布时间】:2016-02-08 16:24:23
【问题描述】:
我有一个 iOS 应用程序,我在 appleWatch 上为它编写了一个扩展程序。 我正在使用 transferUserInfo 方法将数据(NSDictionary)发送到 appleWatch 扩展。一切都在模拟器中运行,但是当我尝试在真实设备上运行应用程序时,虽然 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];
}
dishDictionary 在 viewDidLoad 方法中声明,它包含数据。
在接收方(Watch Extension) 我在 ExtensionDelegate.m 中配置 WCSession 并接收数据,如下所示:
- (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];
}
}
【问题讨论】:
-
您在日志中看到
Received data from the iPhonemessage。我建议您使用- session:didFinishUserInfoTransfer:error:注销错误。对了,试着把扩展代码放在applicationDidFinishLaunching方法里 -
当应用程序两边都打开时,您的手表是否会收到数据?
-
我在模拟器中接收数据,但是在真正的 iWatch 上执行时,我没有得到任何数据显示,甚至在我收到数据的日志中也没有。
-
我会尝试其他方法并应用您的建议并希望它会起作用:)
-
我尝试了此处所述的方法,但不幸的是它仍然不起作用。我找到了另一个项目,并在 iWatch 上执行了它,它使用 sendMessage 和 transferUserInfo 完美运行。我会尝试更多,一旦我找出问题所在,我会在这里发布。
标签: ios objective-c iphone apple-watch wcsession