【问题标题】:Facebook dialog failed with error: The operation couldn’t be completed. (NSURLErrorDomain error -999.)Facebook 对话框因错误而失败:操作无法完成。 (NSURLErrorDomain 错误 -999。)
【发布时间】:2012-02-17 06:33:39
【问题描述】:

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

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

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

我已经在堆栈中阅读过它,它说:

根据“Foundation Constants Reference”,错误代码 -999 表示“NSURLErrorCancelled”。

说明:

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

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

如果需要更多代码,我可以添加。

提前致谢。

【问题讨论】:

    标签: iphone objective-c ios facebook


    【解决方案1】:

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

    【讨论】:

    • 谢谢!!!这真的很有帮助,我也做了同样的事情,但对我来说似乎很糟糕。尽管如此,您的回答和处理方式似乎更好。非常感谢。 @Brian Rothstein
    • 当然。在代码中看到解决方案可能不太疯狂的证据总是很高兴。
    【解决方案2】:

    嗯,好消息是 Facebook 的用户都同意你的解决方法:

    (响应 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]; } }

    【讨论】:

    • 谢谢。毕竟我们没那么老套!
    猜你喜欢
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 2017-01-01
    • 1970-01-01
    • 2021-10-24
    相关资源
    最近更新 更多