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上偷看同意你的修复:
- https://github.com/facebook/facebook-ios-sdk/pull/436/files
- https://github.com/facebook/facebook-ios-sdk/commit/5077944#diff-0
(响应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]; } }