Facebook对话框失败,错误为:操作无法完成.(NSURLError域错误-999.)



我使用的是ios版的facebookapi,我使用facebook对话框发帖。

基本想法是,我有一个按钮来发布,它调用一个方法,并询问你是登录后立即发布,还是执行登录后发布。当第二种情况发生时,我无法在登录facebook后立即发布,所以我必须点击按钮并再次调用该方法,这样我才能发布。

脸书发给我的错误说:操作无法完成。(NSURLError域错误-999。)

我在这里读过很多关于它的文章,上面写着:

根据"Foundation常量参考",错误代码-999表示"NSURLErrorCancelled"。

描述:

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

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

如果需要更多的代码,我可以放它。

提前谢谢。

我解决这个问题的方法是,我将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代码已经忽略了同样的错误。

好消息是,Facebook上的偷窥者同意你的解决方案:

  • https://github.com/facebook/facebook-ios-sdk/pull/436/files
  • https://github.com/facebook/facebook-ios-sdk/commit/5077944#diff-0

(响应FB错误#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];
         }
     }

最新更新