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