Apple Watch – 只有在手机上的应用程序处于活动状态才能获取数据

我使用模拟器开发并部署了我们的Apple Watch扩展应用程序。 它已被批准,现在在应用程序商店可用,所以苹果很高兴!

今天,我能够亲身体验一下手表,发现了一个真正的问题 – 如果手机上的应用程序不仅仅是开放的,而且还是活跃的,那么我只能与手机进行交互,从而击败对象。

我在手机应用程序的appDelegate中实现了以下方法作为代理来获取我的实时数据并将其返回给手表。

我基本上传递了一个请求到appDelegate – 我检查了哪个数据应该返回的userInfo,然后电话应用程序做业务,并返回一个userInfo字典包含手表的数据parsing:

 -(void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply { if ([userInfo objectForKey:@"GetWatchData"]) { [TPWatchData configureWatchData:^(BOOL success) { if (success) { reply([TPWatchData watchData]); } else { reply(@{@"FAIL":@"AppDelegate"}); } }]; } } 

我在手表上使用这种方法在手表中调用它(只是我所做的一个例子):

  [TPWPlanList openParentApplication:@{@"GetWatchData":@1} reply:^(NSDictionary *replyInfo, NSError *error) { if ([replyInfo objectForKey:@"Overview"]) { if (error.code == 0) { if ([replyInfo objectForKey:@"FAIL"]) { // Something failed } else { self.dic_overview = [replyInfo objectForKey:@"Overview"]; //[self reloadPlanListTable]; } } else { // Something failed } } }]; 

如前所述,这在模拟器中完美工作,实际上在物理手表上完美工作 – 但只有当主应用程序在手机上打开并处于活动状态时。 应用程序在后台或电话显示器睡眠的那一分钟,没有数据通过上述方法传递。

有什么想法吗? 我显然做错了什么,但是在我咬了之前,我已经设法让整个事情在真实的设备上实现。

非常感谢!

如果您的openParentApplication:reply:方法仅在主iOS应用程序处于活动状态时起作用,那么我几乎可以保证您的iOS应用程序在有机会回复之前在后台被杀死。

解决scheme是让应用程序尽快响应请求,然后完成正常的任务。 在开发人员论坛中有关于此的说明: https : //devforums.apple.com/thread/264473?tstart = 0

我还写了一篇博客文章,详细介绍了在论坛中添加注释之前所使用的方法: http : //www.fiveminutewatchkit.com/blog/2015/3/11/one-weird-trick-to-fix- openparentapplicationreply