84

我一直在尝试使用 Corona SDK 的 Facebook API 在我正在 Facebook 上开发的游戏上发布分数。但是,我有一个问题。在我第一次尝试发布到 facebook 时,登录和用户身份验证后出现此错误:

NSURLErrorDomain 错误代码 -999

然后,它不会在 Facebook 上发布。此错误的可能原因是什么,我该如何解决?我尝试在网上搜索,但找不到有关它的信息。提前致谢。

顺便说一句,我没有在我的应用程序上使用 webview。只是我的 Facebook 类中的小部件 api 和 show_dialog 侦听器。

4

11 回答 11

143

该错误已记录在Mac 开发人员库(iOS 文档)中

文档中的相关部分将是:

URL 加载系统错误代码

这些值作为域“NSURLErrorDomain”的 NSError 对象的错误代码属性返回。

enum
{
   NSURLErrorUnknown = -1,
   NSURLErrorCancelled = -999,
   NSURLErrorBadURL = -1000,
   NSURLErrorTimedOut = -1001,

如你看到的; -999是由 引起的ErrorCancelled。这意味着:在前一个请求完成之前发出另一个请求。

于 2013-04-18T06:38:08.883 回答
11

hjpotter92 是绝对正确的,我只是想为我的案例提供解决方案。希望它对你也有用。这是我的情况:

在登录页面>按登录>弹出加载对话框>调用登录服务>关闭对话框>推送另一个屏幕>调用另一个服务->导致错误-999

为了解决这个问题,我在关闭对话框和推送新屏幕之间设置了一个延迟:

    [indicatorAlert dismissWithClickedButtonIndex:0 animated:YES];
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.01 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
                [self performSegueWithIdentifier:@"HomeSegue" sender:nil];
            });

奇怪的是,这个问题只发生在 iOS 7 上。

于 2013-11-29T07:31:52.797 回答
11

只是想在这里补充一下,当收到-999 "cancelled"问题时,通常是以下两件事之一:

  • 您再次执行完全相同的请求。
  • 您正在维护对manager过早释放的对象的弱引用。(创建强引用)
于 2019-01-14T09:34:50.830 回答
5

我在使用 Alamofire 时遇到了同样的错误,这是因为证书固定。该证书不再有效,因此我不得不将其删除并添加新证书。希望能帮助到你。

于 2019-07-04T10:31:20.953 回答
2

我没有使用 Corona SDK 的 Facebook API,但是我在使用 Alamofire 时遇到了这个问题secondRequest,根据我在互联网上找到的帖子,总是取消执行并出现错误 -999,原因是该session属性deinit在异步工作完成之前它超出了范围,我终于通过deinit会话属性手动解决了这个问题,所以编译器不会在错误的位置取消它:

class SessionManager {
    var session:SessionManager?

    init() {
        self.session = SessionManager(configuration:URLSessionConfiguration.ephemeral)
    }
    private func firstRequest() {
        guard let session = self.session else {return}
        session.request(request_url).responseData {response in
            if let data=response.data {
                self.secondRequest()
            }
    }
    private func secondRequest() {
        guard let session = self.session else {return}
        session.request(request_url).responseData {response in
            if let data=response.data {
                self.secondRequest()
            }
            //session will no longer be needed, deinit it
            self.session = nil
    }

    }
于 2017-12-21T23:07:01.117 回答
2

除了Ramon写的以外,收到 a 时还有第三种可能的原因NSURLErrorDomain -999 cancelled

您在执行任务时取消了任务,方法是调用.cancel()datatask 对象或因为您使用.invalidateAndCancel()了会话对象。如果您正在使用委托创建自定义会话,则应调用.invalidateAndCancel().finishTasksAndInvalidate()解析会话与其委托之间的强引用,如Apple Developer Documentation中所述:

会话对象保持对委托的强引用,直到您的应用退出或显式使会话无效。如果您不使会话无效,您的应用程序会泄漏内存,直到它退出。

如果您想知道这种日志记录行为,我在Apple 开发者论坛中找到了以下解释:

作为解释,早在 iOS 10 中,我们就引入了一个新的日志系统范围的日志架构(详情请观看WWDC 2016 Session 721 Unified Logging 和 Activity Tracing),包括 CFNetwork 在内的许多子系统正在迁移到那。在该动作完全完成之前,您将遇到像这样的一些奇怪的边缘情况。

于 2019-08-24T07:56:50.313 回答
1

我们公司的应用程序在iOS中有很多-999错误。找了一圈,发现原因有两个,比如网络任务被dealloc或者证书无效。但是我检查了我们的代码,这两个是不可能的。我正在使用使用 URLSession 的 Alamofire。幸运的是,我们公司的android app的网络是正常的。所以我们检查差异。我们发现iOS的http请求是Http2.0,而android是Http1.1。所以我们强制后端http支持版本降低到http1.1,然后-999错误计数下降!!!

我认为 Apple 的 URLSession 中可能存在一些错误。检查链接New NSURLSession 每个 DataTask overkill?一些详细的想法

于 2019-07-26T03:47:58.237 回答
1

请检查如果您cancel()要求URLSessionDataTask修复

NSURLErrorDomain Code=-999 "cancelled"
于 2020-10-25T17:57:50.137 回答
0

我在 iOS 特定版本的 Xamarin 应用程序中收到此错误。不确定根本原因,但在我的情况下,能够通过使用 post 方法而不是 get 来解决它,而不是在请求正文中传递服务器上下文的任何内容——无论如何这更有意义。Android / Windows / 服务都处理带有内容的 GET,但在 iOS 应用程序中将变得部分无响应,然后在日志中吐出 999 NSUrlErrorDomain 内容。希望这可以帮助其他人遇到这个问题。我假设网络代码陷入循环,但看不到有问题的代码。

于 2019-09-12T19:39:47.660 回答
0

对于我的Cordova 项目(或类似项目),原来是插件问题。确保您没有丢失任何插件,并确保它们已正确安装且没有问题。

验证这一点的最简单方法是通过重新创建 Cordova 项目( cordova create <path>) 以及所需的平台 ( cordova platform add <platform name>) 重新开始,并使用详细标志 (--verbose) 添加每个插件,以便您可以查看控制台日志中是否出现任何问题在为每个平台下载、添加到项目和安装插件时 ( cordova plugin add cordova-plugin-device --verbose)

回顾: cordova create <path> cordova platform add <platform name> cordova plugin add cordova-plugin-device --verbose

于 2019-10-01T08:03:49.317 回答
0

就我而言,我使用了一个不需要正文内容的上传任务帖子:

// The `from: nil` induces error "cancelled" code -999
let task = session.uploadTask(with: urlRequest, from: nil, completionHandler: handler)

解决方法是使用零字节数据而不是 nil,

let task = session.uploadTask(with: urlRequest, from: Data(), completionHandler: handler)

框架文档没有说明为什么 from bodyData 是可选类型,或者当它为 nil 时会发生什么。

于 2021-08-11T17:43:12.087 回答