iOS错误:FBSOpenApplicationErrorDomain错误5.这是什么意思?

时间:2015-03-07 22:48:06

标签: ios watchkit

我已经看到了错误4的报告,但没有看到5.我在尝试使用“openParentApplication:reply”请求时将其作为控制台消息。日志中没有足够的信息来确定问题是在iOS代码,WK代码还是模拟器中。我重新启动了sim,并清理了项目。有什么想法吗?

WK代码:

- (IBAction)sendRequest {

    NSDictionary *request = @{@"request":@"Request1"};

    [InterfaceController openParentApplication:request reply:^(NSDictionary *replyInfo, NSError *error) {

        if (error) {
            NSLog(@"%@", error);
        } else {

            [self.label1 setText:[replyInfo objectForKey:@"response1"]];
            [self.label2 setText:[replyInfo objectForKey:@"response2"]];
            [self.label3 setText:[replyInfo objectForKey:@"response3"]];
        }

    }];
}

iOS代码:

- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply{

    NSLog(@"%s", __FUNCTION__);
    //([max intValue] - [min intValue]) + [min intValue]

    int randNum1 = arc4random_uniform(16);
    int randNum2 = arc4random_uniform(16);
    int randNum3 = arc4random_uniform(16);


    NSString *num1 = [NSString stringWithFormat:@"Test%d", randNum1]; 
    NSString *num2 = [NSString stringWithFormat:@"Test%d", randNum2];
    NSString *num3 = [NSString stringWithFormat:@"Test%d", randNum3]; 

    if ([[userInfo objectForKey:@"request"] isEqualToString:@"Request1"]) {

        NSLog(@"containing app received message from watch: Request1");


        NSDictionary *response = @{@"response1" : num1, @"response2" : num2, @"response3" : num3};
        reply(response);
    }

}

唯一的控制台日志是:

WatchKit Extension[48954:9523373] Error Domain=FBSOpenApplicationErrorDomain Code=5 "The operation couldn’t be completed. (FBSOpenApplicationErrorDomain error 5.)

3 个答案:

答案 0 :(得分:5)

我今天也面临同样的问题。

  • 从模拟器中删除了应用
  • 重置模拟器
  • 重新启动XCode
  • info.plist
  • 进行了更改

但是当我在Production中运行应用时,它确实有效。应用程序在模拟器的生产模式下运行良好。

enter image description here

接下来,我删除了现有的dev模式方案并创建了另一个dev模式方案,并且它有效。然后它提醒我,在应用程序中实现后台提取功能时,我检查了Launch due to a background fetch event方案中的选项Dev选项。后来我放弃了Background Fetch,但忘记取消选中此选项。

enter image description here

答案 1 :(得分:1)

我建议你尝试简化。我已经回答了Swift中一个非常类似的问题here。我会将逻辑简化为以下内容:

WK代码

- (IBAction)sendRequest {
    [InterfaceController openParentApplication:request reply:^(NSDictionary *replyInfo, NSError *error) {
        NSLog(@"Reply Info: %@", replyInfo);
        NSLog(@"Error: %@", error);
    }];
}

iOS代码

- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply {
    NSDictionary *response = @{@"replyKey" : @"replyValue"};
    reply(response);
}

一旦你有了这个工作,然后开始一次添加额外的解析一步。您还可以将调试程序附加到iOS应用程序,按照these说明逐步完成调用。你可能没有在iOS应用程序上调用回复块而你甚至都不知道它。

答案 2 :(得分:1)

在我的情况下,只有退出模拟器解决了这个问题。