Search code examples
objective-cioscocoa-touchuiwebviewuiwebviewdelegate

New error in iOS 5: WebKit discarded an uncaught exception


I am trying to load a UIWebView with the Facebook OAuth authorization URL and I am using the following code. When my UIWebView loads with Facebook login page, I enter my credentials, then press the "Log in" button. When I hit the button I am getting the following error:

WebKit discarded an uncaught exception in the webView:decidePolicyForNavigationAction:request:frame:decisionListener:delegate: Application tried to present modally an active controller .

This same code works fine with iOS 4.3 and previous versions, but it doesn't work in iOS 5.0. I don't understand the problem, can anyone please help me?

NSString *redirectUrlString = @"http://www.facebook.com/connect/login_success.html";
NSString *authFormatString = @"https://graph.facebook.com/oauth/authorize?client_id=%@&redirect_uri=%@&scope=%@&type=user_agent&display=touch";

NSString *urlString = [NSString stringWithFormat:authFormatString, _apiKey, redirectUrlString, _requestedPermissions];
NSURL *url = [NSURL URLWithString:urlString];

NSLog(@"NSURL: %@", urlString);

NSURLRequest *request = [NSURLRequest requestWithURL:url];
[_webView loadRequest:request];

Solution

  • Are you using the Ray Wenderlich code? (FBFunLoginDialog).. I found that this fixes it:

    -(void)checkLoginRequired:(NSString *)urlString {
        NSLog(@"Url: %@",urlString);
        if ([urlString rangeOfString:@"login.php"].location != NSNotFound && [urlString rangeOfString:@"refid"].location == NSNotFound) {
                [_delegate displayRequired];
        } else if ([urlString rangeOfString:@"user_denied"].location != NSNotFound) {
             [_delegate closeTapped];
        }
    }