当我在没有互联网连接的情况下测试我的项目时,为了调用上传功能,我无法捕获失败情况。
我已经打印了状态代码,但我得到的是 nil 并显示了我的默认值。
我怎么了?
而且我还收到了如下文本的错误:
==)[r]: FAILURE: Error Domain=NSURLErrorDomain Code=-1009 "似乎已断开与互联网的连接。" UserInfo={NSUnderlyingError=0x1d4441560 {Error Domain=kCFErrorDomainCFNetwork Code=-1009 "(null)" UserInfo={_kCFStreamErrorCodeKey=50, _kCFStreamErrorDomainKey=1}}, NSErrorFailingURLStringKey=https://appdominname/chatroom/5a3cba41f7255b356eeee33/media, NSErrorFailingURLKey=https://appdominname/chatroom/5a3cba41f7255b356eeee33/media, _kCFStreamErrorDomainKey=1, _kCFStreamErrorCodeKey=50, NSLocalizedDescription=似乎已断开与互联网的连接。}
==)[c]: 123
func uploadPost(parameters:[String:Any], fileUrl:URL, _ callback: @escaping (JSON) -> Void) {
let url = self.customUrl(parameters)
Alamofire.upload(multipartFormData: { (multipartFormData) in
multipartFormData.append(fileUrl, withName: "media")
for (key, value) in parameters {
multipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key)
}
}, usingThreshold: .init(), to: url, method: .post, headers: ["Authorization": "Bearer \(currentUser.token)"]) { (encodingResult) in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON(completionHandler: { (response) in
print("==)[r]:",response)
print("==)[c]:",response.response?.statusCode ?? "123")
if let statusCode = response.response?.statusCode {
switch statusCode {
case 201:
print("success statusCode: \(statusCode)")
default:
print("error with response status: \(statusCode)")
}
}
if let result = response.result.value {
let json = result as! NSDictionary
// print(json["status"] ?? "")
callback(JSON(json))
}
})
case .failure(let encodingError):
alertWithConfirm(title: localString(string: "WARNING"), message: localString(string: "ERROR_UPLOAD_API_FAIL"), afterConfirm: { _ in
callback(JSON(encodingError))
})
print("error:\(encodingError)")
}
}
}
最佳答案
您的代码仅包含用于编码的 failure
block ,但不包含请求本身。在您的第一个 success
block 中,您应该做类似的事情
case .success(let upload, _, _):
switch response.result {
case .success:
//THE REQUEST WAS SUCCESSFUL
case .failure:
//THIS IS WHERE YOU WILL GET YOUR REQUEST FAILURE
}
关于ios - 使用 Alamofire - Swift 3 上传对象时如何捕获错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49355382/