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

时间:2012-01-23 22:34:56

标签: iphone objective-c ios facebook

我正在使用facebook api for ios,我正在使用facebook对话框发布。

基本的想法是我有一个发布按钮来调用方法,并询问您是否立即登录发布或执行登录然后发布。当第二种情况发生时,我无法在登录到Facebook后立即发布,所以我必须点击按钮再次调用该方法,以便我可以发布。

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

我已经在这里阅读了它,它说:

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

说明

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

问题是为什么facebook会发送给我这个,我该如何解决?

如果需要更多代码我可以把它。

提前致谢。

2 个答案:

答案 0 :(得分:7)

我修复此问题的方法是将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

我不知道这是否是最佳解决方案,但我对此感到有点自信,因为另一篇Facebook sdk代码已经忽略了相同的错误。

答案 1 :(得分:2)

好吧,好消息是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];
         }
     }