![](/img/trans.png)
[英]“The UIApplicationDelegate in the iPhone App never called reply() ” - Xamarin
[英]“The UIApplicationDelegate in the iPhone App never called reply() in -[UIApplicationDelegate application:handleWatchKitExtensionRequest:reply:]”
好的,所以我要制作这个Apple Watch应用程序,在我的Watch App中,我有一个按钮。 当您触摸按钮时,它将执行以下操作:
[WKInterfaceController openParentApplication:[NSDictionary dictionary] reply:^(NSDictionary *replyInfo, NSError *error) {
if(error) {
NSLog(@"%@",error);
}
}];
在我的应用程序委托文件中,我这样做:
-(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代码= 2“ iPhone应用程序中的UIApplicationDelegate从未在-[UIApplicationDelegate应用程序:handleWatchKitExtensionRequest:reply:]中调用Reply()”“ UserInfo = 0x7fd2b9c35ae0 {NSLocalizedDescription = iPhone应用程序中的UIApplicationDelegate从未在[[UIApplicationDelegate application:handleWatchKitExtensionRequest:reply:]}中称为reply()
我正在如上所示调用reply()
,但没有看到它! 另外,它忽略了我在其中的其他代码!
谁能解释为什么会这样?
从文档中:
replyInfo:包含要返回到WatchKit应用程序的数据的字典。 字典的内容必须可序列化到属性列表文件。 该词典的内容由您自行决定,您可以指定nil。
如果您没有发送有效的词典,您将不会得到答复。
您需要在后台任务中在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
错误“错误域= com.apple.watchkit.errors代码= 2”错误通常表示您的应用程序的handleWatchKitKitExtensionRequest发生了错误,并且/或未调用reply()或未正确调用它。
该文档位于: https : //developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/#//apple_ref/occ/intfm/UIApplicationDelegate/application :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);
}
如果您的词典包含自定义类,则可能会遇到麻烦。 尝试先发送简单的字符串,看看是否有区别。
检查您的“重要和机密”代码没有引发异常,或者完成后不调用回复(例如,错误负载)。
您的“重要和机密”代码必须非常快。 如果不是这种情况,则必须使用后台任务 (请参阅此处的示例)。
最后,如果您的代码需要时间,可以访问网络,请考虑使用后台任务。 如果您使用异步网络任务(推荐),请在收到答案后回复,然后完成后台任务。
最后但并非最不重要的一点是,在某些iOS版本上,对parentApplication的首次调用失败: WatchKit App中openParentApplication的行为不一致 。 这为我解决了最后一个问题!
希望有帮助;-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.