Apple Watch - 仅在 phone 上的应用处于活动状态时获取数据
Apple Watch - only getting data if app on phone is active
我已经使用模拟器开发并部署了我们的 Apple Watch Extension App。它已经获得批准,现在可以在 App Store 上使用,所以 Apple 很高兴!
今天我拿到了一块实体手表,发现了一个真正的问题-我只能与手表互动-phone,如果我phone上的应用程序不只是打开,而且还活跃……从而打败了对象。
我正在 phone 应用程序的 appDelegate
中实施以下方法作为代理来获取我的实时数据并 return 它到手表。
我基本上将请求传递给 appDelegate
- 我检查应该 returned 的用户信息,然后 phone 应用程序执行业务并且 returns 包含手表解析数据的 userInfo 字典:
-(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"});
}
}];
}
}
我在 watch extension
上使用这种方法在手表中调用它(只是我进行的调用的一个示例):
[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
}
}
}];
如前所述,它在模拟器中运行良好,在实体手表上运行良好——但前提是我在 phone 上打开主应用程序并处于活动状态。应用程序在后台或 phone 显示器休眠的那一刻,使用上述方法不会传递任何数据。
有什么想法吗?我显然做错了什么,但在它咬我之前,我已经设法让整个事情在真实设备上直播。
非常感谢!
如果您的 openParentApplication:reply:
方法仅在主机 iOS 应用程序处于活动状态时才有效,我几乎可以保证您的 iOS 应用程序在它具有有机会回复。
解决方案是让应用尽快响应请求,然后完成您的正常任务。开发者论坛中有关于此的注释:https://devforums.apple.com/thread/264473?tstart=0
我也写了一篇博客post,详细说明了我在论坛加注之前使用的方法:http://www.fiveminutewatchkit.com/blog/2015/3/11/one-weird-trick-to-fix-openparentapplicationreply
我已经使用模拟器开发并部署了我们的 Apple Watch Extension App。它已经获得批准,现在可以在 App Store 上使用,所以 Apple 很高兴!
今天我拿到了一块实体手表,发现了一个真正的问题-我只能与手表互动-phone,如果我phone上的应用程序不只是打开,而且还活跃……从而打败了对象。
我正在 phone 应用程序的 appDelegate
中实施以下方法作为代理来获取我的实时数据并 return 它到手表。
我基本上将请求传递给 appDelegate
- 我检查应该 returned 的用户信息,然后 phone 应用程序执行业务并且 returns 包含手表解析数据的 userInfo 字典:
-(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"});
}
}];
}
}
我在 watch extension
上使用这种方法在手表中调用它(只是我进行的调用的一个示例):
[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
}
}
}];
如前所述,它在模拟器中运行良好,在实体手表上运行良好——但前提是我在 phone 上打开主应用程序并处于活动状态。应用程序在后台或 phone 显示器休眠的那一刻,使用上述方法不会传递任何数据。
有什么想法吗?我显然做错了什么,但在它咬我之前,我已经设法让整个事情在真实设备上直播。
非常感谢!
如果您的 openParentApplication:reply:
方法仅在主机 iOS 应用程序处于活动状态时才有效,我几乎可以保证您的 iOS 应用程序在它具有有机会回复。
解决方案是让应用尽快响应请求,然后完成您的正常任务。开发者论坛中有关于此的注释:https://devforums.apple.com/thread/264473?tstart=0
我也写了一篇博客post,详细说明了我在论坛加注之前使用的方法:http://www.fiveminutewatchkit.com/blog/2015/3/11/one-weird-trick-to-fix-openparentapplicationreply