Swift3 重新打开应用程序时发生Alamofire错误

Swift3 重新打开应用程序时发生Alamofire错误,swift3,alamofire,ios10.3,Swift3,Alamofire,Ios10.3,我一直在开发一款可以下载大文件的应用程序。我用的是Swift 3和Alamofire 下载可以在后台运行,在iOS 10.2.x上,这一切都运行得非常好。 但当设备切换到睡眠状态时,更新到iOS 10.3.x时,再次打开应用程序时,会引发以下错误: [] nw_socket_get_input_frames recvmsg(fd 6, 1024 bytes): [57] Socket is not connected [] nw_endpoint_handler_add_write_reques

我一直在开发一款可以下载大文件的应用程序。我用的是Swift 3和Alamofire

下载可以在后台运行,在iOS 10.2.x上,这一切都运行得非常好。 但当设备切换到睡眠状态时,更新到iOS 10.3.x时,再次打开应用程序时,会引发以下错误:

[] nw_socket_get_input_frames recvmsg(fd 6, 1024 bytes): [57] Socket is not connected
[] nw_endpoint_handler_add_write_request [1.1 192.124.249.2:443 failed socket-flow (satisfied)] cannot accept write requests
[] tcp_connection_write_eof_block_invoke Write close callback received error: [22] Invalid argument
下载在后台继续,完成后将触发完成回调。但是由于这些错误,除非我关闭应用程序并再次打开它并在打开时重新加载表格单元格视图,否则似乎不会调用进度回调

我在网上找不到关于此类错误的更多信息,只有关于隐藏错误以避免打印到控制台的信息

有人能帮忙吗


谢谢

我用Alamofire下载一个大文件时遇到了同样的问题。起初,我的实现调用validate(),然后调用responseData(队列:completionHandler:)

发生此错误时,Alamofire将其作为故障捕获,并使用Alamofire.AFError.ResponseValidationFailureReason.dataFileNil(没有resumeData),这表明在to参数上发送的闭包为零,这与我的情况不同

因此,我的解决方案是删除validate()调用,并通过捕捉开关上的状态代码手动执行验证

现在,如果没有validate()调用,Alamofire捕获的错误与失败相同,但状态代码为200,并且resumeData。当这种情况发生时,我只是再次进行下载,但这次通过下载电话发送简历数据。 由于resumeData几乎为100%(因为错误发生在Alamofire尝试写入文件时,在下载结束时),因此第二次下载非常短

所以我的代码基本上是这样的:

switch response.response?.statusCode {
    // other cases
    case 200:
        if let resumeData = response.resumeData {
           // failed
           // retry the download using resumeData
        } else {
           // succeed finished download
        }
   // more cases
}

如果您需要更多信息/详细信息,请告诉我

我在使用Alamofire下载大文件(大约800 mb)时遇到了同样的问题。起初,我的实现调用validate(),然后调用responseData(队列:completionHandler:)

发生此错误时,Alamofire将其作为故障捕获,并使用Alamofire.AFError.ResponseValidationFailureReason.dataFileNil(没有resumeData),这表明在to参数上发送的闭包为零,这与我的情况不同

因此,我的解决方案是删除validate()调用,并通过捕捉开关上的状态代码手动执行验证

现在,如果没有validate()调用,Alamofire捕获的错误与失败相同,但状态代码为200,并且resumeData。当这种情况发生时,我只是再次进行下载,但这次通过下载电话发送简历数据。 由于resumeData几乎为100%(因为错误发生在Alamofire尝试写入文件时,在下载结束时),因此第二次下载非常短

所以我的代码基本上是这样的:

switch response.response?.statusCode {
    // other cases
    case 200:
        if let resumeData = response.resumeData {
           // failed
           // retry the download using resumeData
        } else {
           // succeed finished download
        }
   // more cases
}

如果您需要更多信息/详细信息,请告诉我

我有类似的问题,您找到错误的原因了吗?没有,我永远找不到原因。我最终从头开始重写了我的应用程序,第二次完全没有显示这个错误。我有一个类似的问题,你找到错误的原因了吗?不,我永远找不到原因。我最终从头开始重写了我的应用程序,第二次完全没有显示这个错误。