好的,我正在制作Apple Watch应用程序,在我的Watch App中,我有一个按钮。当您触摸按钮时,它会执行以下操作:
[WKInterfaceController openParentApplication:[NSDictionary dictionary] reply:^(NSDictionary *replyInfo, NSError *error) {
if(error) {
NSLog(@"%@",error);
}
}];
在我的App Delegate文件中,我这样做:
-(void) application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply {
//Code that is not importent and is confidential
reply([NSDictionary dictionary]);
}
但是当我按下按钮时出现此错误:
错误Domain = com.apple.watchkit.errors Code = 2" iPhone App中的UIApplicationDelegate从未调用reply() - [UIApplicationDelegate application:handleWatchKitExtensionRequest:reply:]" UserInfo = 0x7fd2b9c35ae0 {NSLocalizedDescription = iPhone App中的UIApplicationDelegate从未调用reply() - [UIApplicationDelegate application:handleWatchKitExtensionRequest:reply:]}
如上所示,我正在呼叫reply()
,但它没有看到!此外,它忽略了我在那里的其他代码!
有人可以解释为什么会这样吗?
答案 0 :(得分:3)
来自文档:
replyInfo:包含要返回WatchKit应用程序的数据的字典。 字典的内容必须可序列化为属性列表 文件。这本词典的内容由您自行决定 可以指定nil。
如果您没有发送有效字典,则不会得到答复。
答案 1 :(得分:1)
您需要在后台任务中执行handleWatchKitExtensionRequest
中的所有工作。您可以在此处找到文档:https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html
此博客文章也可能有用:http://www.fiveminutewatchkit.com/blog/2015/3/11/one-weird-trick-to-fix-openparentapplicationreply
答案 2 :(得分:0)
错误“Error Domain = com.apple.watchkit.errors Code = 2”iPhone App中的UIApplicationDelegate从未调用reply() - [UIApplicationDelegate application:handleWatchKitExtensionRequest:reply:]“通常意味着你的应用程序的handleWatchKitExtensionRequest已经错误和/或没有调用reply()或正确调用它。
以下是使用NSDictionary响应的一些简单示例代码。
- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply{
NSLog(@"containing app received message from watch");
NSDictionary *response = @{@"response" : @"MyResponse"};
reply(response);
}
答案 3 :(得分:0)
如果您的字典包含自定义类,则可能会遇到问题。尝试先发送简单的字符串,看看是否有所作为。
检查您的“重要且机密”代码是否不会引发异常,或者在未调用回复的情况下完成(例如,使用错误有效负载)。
您的“重要和保密”代码必须非常快。如果不是这种情况,则必须使用background task(有关示例,请参阅here)。
最后,如果您的代码需要时间,请考虑使用后台任务,进行网络访问。如果使用异步网络任务(推荐),请在收到答案时进行回复,并在此时完成后台任务。
最后但并非最不重要的是,第一次调用parentApplication在某些iOS版本上失败:Inconsistent behavior of openParentApplication in my WatchKit App。这解决了我的最后一个问题!
希望有所帮助; - )