我正在使用facebook api for ios,我正在使用facebook对话框发布。
基本的想法是我有一个发布按钮来调用方法,并询问您是否立即登录发布或执行登录然后发布。当第二种情况发生时,我无法在登录到Facebook后立即发布,所以我必须点击按钮再次调用该方法,以便我可以发布。
facebook发给我的错误说: 操作无法完成。 (NSURLErrorDomain错误-999。)
我已经在这里阅读了它,它说:
根据“基础常量参考”,错误代码-999表示“NSURLErrorCancelled”。
说明
取消异步加载时返回。 Web Kit框架委托在对加载资源执行取消操作时将收到此错误。请注意,如果取消下载,NSURLConnection或NSURLDownload委托将不会收到此错误。适用于iOS 2.0及更高版本。在NSURLError.h中声明。
问题是为什么facebook会发送给我这个,我该如何解决?
如果需要更多代码我可以把它。
提前致谢。
答案 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)
(回应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];
}
}