使用AFNetworking时,指示“Anyobject”不是“NSProxy”的子类型

时间:2017-04-24 06:36:26

标签: ios swift afnetworking-3

我正在使用AFNetworking从openweathermap API中检索天气信息。

let manager = AFHTTPSessionManager()
    manager.requestSerializer = AFJSONRequestSerializer()
    let url = "http://api.openweathermap.org/data/2.5/weather"
    let params = ["lat": latitude,"lon": longitude,"cnt": 0]

    manager.get(url, parameters: params,
                success: {(operation: URLSessionDataTask,responseObject: AnyObject!) in print("JSON" + responseObject.description!) },
                failure: {(operation: URLSessionDataTask?,error: Error) in print(error.localizedDescription)}
    )

responseObject.description突出显示'Anyobject'不是'NSProxy'的子类型 如果删除.description,错误将消失。 平台:xcode 8.3.2 swift:3

'Anyobject' is not a subtype of 'NSProxy'

1 个答案:

答案 0 :(得分:0)

您使用的所有get方法中的第一个是不推荐使用的方法(我假设您拥有最新的AFNetworking版本)。请以这种方式使用新的:

let manager = AFHTTPSessionManager()
manager.requestSerializer = AFJSONRequestSerializer()
let url = "http://api.openweathermap.org/data/2.5/weather"
let params = ["lat": 5.0,"lon": 5.0,"cnt": 0]
manager.get(url, parameters: params, progress: nil, success: { (operation, responseObject) in
    if let responseObject = responseObject {
        print(responseObject)
    } else {
        print("There is no response object") //assume parsing error for JSON
    }
}) { (operation, error) in
    print(error.localizedDescription)
}

作为最后一个提示:如果你使用Swift,最好使用Alamofire: https://github.com/Alamofire/Alamofire

它支持来自Swift的许多不错的功能以及更好的错误处理。例如,Alamofire将解析错误视为真正的错误并调用失败块,而不是像ANetworking那样的成功块。 还允许您轻松集成一些JSON解析库,如SwiftJSON https://github.com/SwiftyJSON/SwiftyJSON