“iPhone应用程序中的UIApplicationDelegate从未在 - [UIApplicationDelegate应用程序:handleWatchKitExtensionRequest:reply:]中调用reply()”

时间:2015-03-23 20:44:05

标签: ios objective-c iphone watchkit apple-watch

好的,我正在制作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(),但它没有看到!此外,它忽略了我在那里的其他代码!

有人可以解释为什么会这样吗?

4 个答案:

答案 0 :(得分:3)

来自文档:

  

replyInfo:包含要返回WatchKit应用程序的数据的字典。   字典的内容必须可序列化为属性列表   文件。这本词典的内容由您自行决定   可以指定nil。

如果您没有发送有效字典,则不会得到答复。

答案 1 :(得分:1)

答案 2 :(得分:0)

错误“Error Domain = com.apple.watchkit.errors Code = 2”iPhone App中的UIApplicationDelegate从未调用reply() - [UIApplicationDelegate application:handleWatchKitExtensionRequest:reply:]“通常意味着你的应用程序的handleWatchKitExtensionRequest已经错误和/或没有调用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);
}

答案 3 :(得分:0)

如果您的字典包含自定义类,则可能会遇到问题。尝试先发送简单的字符串,看看是否有所作为。

检查您的“重要且机密”代码是否不会引发异常,或者在未调用回复的情况下完成(例如,使用错误有效负载)。

您的“重要和保密”代码必须非常快。如果不是这种情况,则必须使用background task(有关示例,请参阅here)。

最后,如果您的代码需要时间,请考虑使用后台任务,进行网络访问。如果使用异步网络任务(推荐),请在收到答案时进行回复,并在此时完成后台任务。

最后但并非最不重要的是,第一次调用parentApplication在某些iOS版本上失败:Inconsistent behavior of openParentApplication in my WatchKit App。这解决了我的最后一个问题!

希望有所帮助; - )