iOS Error: FBSOpenApplicationErrorDomain error 5. What does this mean?
iOS Error: FBSOpenApplicationErrorDomain error 5. What does this mean?
我看到了错误报告 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.)
我建议你尽量简化。我在 Swift 中回答了一个非常相似的问题 。我会将逻辑简化为以下内容:
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 应用程序上调用回复块,您甚至都不知道。
我今天也遇到了同样的问题。
- 已从模拟器中删除应用程序
- 重置模拟器
- 重新启动 XCode
- 在
info.plist
中进行了更改
但是当我在 Production
中 运行 应用程序时,它起作用了。应用在使用模拟器的生产模式下 运行 运行良好。
接下来,我删除了现有的 dev
模式方案并创建了另一个 dev
模式方案并且它起作用了。然后它提醒我,在应用程序中实现后台获取功能时,我检查了 Dev
方案中的选项 Launch due to a background fetch event
选项。后来我放弃了 Background Fetch
但忘记取消选中此选项。
就我而言,仅 退出模拟器 解决了问题。
我看到了错误报告 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.)
我建议你尽量简化。我在 Swift 中回答了一个非常相似的问题
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 应用程序上调用回复块,您甚至都不知道。
我今天也遇到了同样的问题。
- 已从模拟器中删除应用程序
- 重置模拟器
- 重新启动 XCode
- 在
info.plist
中进行了更改
但是当我在 Production
中 运行 应用程序时,它起作用了。应用在使用模拟器的生产模式下 运行 运行良好。
接下来,我删除了现有的 dev
模式方案并创建了另一个 dev
模式方案并且它起作用了。然后它提醒我,在应用程序中实现后台获取功能时,我检查了 Dev
方案中的选项 Launch due to a background fetch event
选项。后来我放弃了 Background Fetch
但忘记取消选中此选项。
就我而言,仅 退出模拟器 解决了问题。