Ios 阿拉莫菲尔不';捕捉错误
我正在使用Alamofire从我的服务器获取数据。但是,它不会捕获错误,因为返回的错误是Ios 阿拉莫菲尔不';捕捉错误,ios,swift,cocoa-touch,afnetworking,alamofire,Ios,Swift,Cocoa Touch,Afnetworking,Alamofire,我正在使用Alamofire从我的服务器获取数据。但是,它不会捕获错误,因为返回的错误是nil。我已经用AFNetworking进行了测试,效果很好。对于这两种操作,返回的状态代码都是401 Unauthorized。我的密码有什么问题吗 我正在使用我的后端。它所做的只是在请求失败时返回错误 GrapeAPI error!('Unauthorized', 401) af网络 manager.GET("someUrl", parameters: nil, success: { (_, objec
nil
。我已经用AFNetworking进行了测试,效果很好。对于这两种操作,返回的状态代码都是401 Unauthorized
。我的密码有什么问题吗
我正在使用我的后端。它所做的只是在请求失败时返回错误
GrapeAPI
error!('Unauthorized', 401)
af网络
manager.GET("someUrl", parameters: nil, success: { (_, object) in
}, failure: { (operation, error) in
// These are the outputs. I'm not assigning any values
// error.localizedDescription = "Request failed: unauthorized (401)"
// statusCode = 401
})
阿拉莫菲尔
Alamofire.request(.GET, "url", parameters: nil)
.response { (a,b,data,error) in
// These are the outputs. I'm not assigning any values
// error = nil
// data = {"error":"Unauthorized"}
// statusCode = 401
}
我可以使用状态代码检查故障。但是我更喜欢检查error对象。但是,由于Alamofire中的错误为
nil
,因此检查请求是否失败非常容易混淆。Alamofire
不会将401 Unauthorized
视为错误,因为它是有效的返回。在您的注释代码中,您正在为错误分配一个值,而不是检查它是否有错误,它应该是:
Alamofire.request(.GET, "url", parameters: nil)
.response { (a,b,data,error) in
if error != nil{
println(error.localizedDescription)
} else {
if let data = data{
//You should probably use a switch statement here
if data.statusCode == 401 {
println("Unauthorized")
} else if data.statusCode == 200 {
println("Success")
}
}
}
我不确定我是否正确理解了你的问题,但我希望这能有所帮助 正如Matt在评论中提到的,在调用
.response()
之前,我需要添加.validate()
。这是故意的。最终代码如下:
Alamofire.request(.GET, "url", parameters: nil)
.validate()
.response { (a,b,data,error) in
// error won't be nil now
// and statusCode will be 401
}
阅读(谢谢!)了解更多信息。更新了我的代码。这些是输出值。我没有给任何变量分配任何值:)在调用
.response()
@mattt之前,需要显式调用.validate()
,这样才有效。阿拉莫菲尔在默认情况下被设计成这样而AFNetworking却不是这样,这有什么原因吗?是的,在这种情况下,显式选择加入更好。