Facebook对话框失败,错误:操作无法完成。 (NSURLErrorDomain错误-999。)

我正在使用Facebook API的ios和我使用的Facebook对话框发布。

基本的想法是,我有一个button来发布,调用一个方法,并问你是否login立即张贴或执行login,然后张贴。 当第二种情况发生时,我不能login到Facebook后发表权利,所以我不得不点击button,再次调用该方法,所以我可以发布。

Facebook发给我的错误说: 操作无法完成。 (NSURLErrorDomain错误-999。)

我已经在这里读了一堆关于它,它说:

根据“基础常量参考”,错误代码-999表示“NSURLErrorCancelled”。

描述:

当asynchronous加载被取消时返回。 Web Kit框架委托将在加载资源上执行取消操作时收到此错误。 请注意,如果下载被取消,NSURLConnection或NSURLDownload委托将不会收到此错误。 在iOS 2.0及更高版本中可用。 在NSURLError.h中声明。

问题是为什么Facebook发送给我,我该如何解决?

如果更多的代码是必要的,我可以把它。

提前致谢。

我解决这个问题的方法是我改变了FBDialog.m来忽略这样的错误代码-999

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { // 102 == WebKitErrorFrameLoadInterruptedByPolicyChange NSLog(@"FBDialog webView didFailLoadWithError:%@ %d",error.domain,error.code); if ([error.domain isEqualToString:@"NSURLErrorDomain"] && error.code == -999) return; if ([error.domain isEqualToString:@"WebKitErrorDomain"] && error.code == 102) return; [self dismissWithError:error animated:YES]; } 

有趣的是,FBLoginDialog已经忽略了错误代码102和-999,而FBDialog只忽略了102。请参阅https://github.com/facebook/facebook-ios-sdk/blob/master/src/FBLoginDialog。 M#L85

我不知道这是否是最好的解决scheme,但我对此稍微有点自信,因为另一块Facebook sdk代码已经忽略了同样的错误。

那么好消息是,在Facebook上偷看同意你的修复:

(响应FB bug#168127053284477)

 - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { // 102 == WebKitErrorFrameLoadInterruptedByPolicyChange - if (!([error.domain isEqualToString:@"WebKitErrorDomain"] && error.code == 102)) { +  // -999 == "Operation could not be completed", note -999 occurs when the user clicks away before +  // the page has completely loaded, if we find cases where we want this to result in dialog failure +  // (usually this just means quick-user), then we should add something more robust here to account +  // for differences in application needs +  if (!(([error.domain isEqualToString:@"NSURLErrorDomain"] && error.code == -999) || +  ([error.domain isEqualToString:@"WebKitErrorDomain"] && error.code == 102))) { [self dismissWithError:error animated:YES]; } }
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { // 102 == WebKitErrorFrameLoadInterruptedByPolicyChange - if (!([error.domain isEqualToString:@"WebKitErrorDomain"] && error.code == 102)) { +  // -999 == "Operation could not be completed", note -999 occurs when the user clicks away before +  // the page has completely loaded, if we find cases where we want this to result in dialog failure +  // (usually this just means quick-user), then we should add something more robust here to account +  // for differences in application needs +  if (!(([error.domain isEqualToString:@"NSURLErrorDomain"] && error.code == -999) || +  ([error.domain isEqualToString:@"WebKitErrorDomain"] && error.code == 102))) { [self dismissWithError:error animated:YES]; } }