问题
I've seen reports for errors 4 but not for 5. I get this as a console message when I'm trying to use an "openParentApplication:reply" request. There isn't enough information in the log to know if the problem is in the iOS code, the WK code or the Simulator. I've restarted the sim, and cleaned the project. Any ideas?
WK Code:
- (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 Code:
- (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);
}
}
The only console log is:
WatchKit Extension[48954:9523373] Error Domain=FBSOpenApplicationErrorDomain Code=5 "The operation couldn’t be completed. (FBSOpenApplicationErrorDomain error 5.)
回答1:
I would suggest you try to simplify. I have answered a very similar problem here that is in Swift. I would simplify the logic to the following:
WK Code
- (IBAction)sendRequest {
[InterfaceController openParentApplication:request reply:^(NSDictionary *replyInfo, NSError *error) {
NSLog(@"Reply Info: %@", replyInfo);
NSLog(@"Error: %@", error);
}];
}
iOS Code
- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply {
NSDictionary *response = @{@"replyKey" : @"replyValue"};
reply(response);
}
Once you have this working, then start adding the additional parsing one step at a time. You can also attach the debugger to the iOS app to step through the call by following these instructions. You may not be calling the reply block on the iOS app and you don't even know it.
回答2:
I also faced same issue today.
- Deleted app from simulator 😂
- Reset simulator 😟
- Restarted XCode 😦
- Made changes in
info.plist
😥
But when I ran app in Production
, it worked 😃. App was running well in production mode with simulator.
Next, I deleted existing dev
mode scheme and created another dev
mode scheme and it worked 😳. Then it reminded me that while implementing background fetch feature in the app, I checked option Launch due to a background fetch event
option in that Dev
scheme. Later i gave up Background Fetch
but forgot to uncheck this option. 😠
回答3:
In my case only quitting simulator resolved the issue.
来源:https://stackoverflow.com/questions/28920969/ios-error-fbsopenapplicationerrordomain-error-5-what-does-this-mean