Ios AFN网络和Swift
我正在尝试使用Swift获得JSON响应 我嗅到了请求和响应->一切正常。但是,返回值总是Ios AFN网络和Swift,ios,json,swift,afnetworking,Ios,Json,Swift,Afnetworking,我正在尝试使用Swift获得JSON响应 我嗅到了请求和响应->一切正常。但是,返回值总是nil let httpClient = AppDelegate.appDelegate().httpRequestOperationManager as AFHTTPRequestOperationManager; let path = "/daten/wfs"; let query = "?service=WFS&request=GetFeature&version=1.1.0&
nil
let httpClient = AppDelegate.appDelegate().httpRequestOperationManager as AFHTTPRequestOperationManager;
let path = "/daten/wfs";
let query = "?service=WFS&request=GetFeature&version=1.1.0&typeName=ogdwien:AMPELOGD&srsName=EPSG:4326&outputFormat=json".stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding);
func successBlock(operation: AFHTTPRequestOperation!, responseObject: AnyObject!) {
println("JSON: " + "\(responseObject)")
}
func errorBlock(operation: AFHTTPRequestOperation!, error:NSError!) {
println("Error: " + error.localizedDescription)
}
let urlString = "\(path)" + "/" + "\(query)"
println("urlString: " + httpClient.baseURL.absoluteString + urlString)
我也这样试过:
httpClient.GET(urlString, parameters: nil,
success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) -> Void in
println("Success")
println("JSON: " + "\(responseObject)")
},
failure:{ (operation: AFHTTPRequestOperation!, error:NSError!) -> Void in
println("Failure")
})
。。。但是responseObject
似乎总是nil
编辑:
原因可能是myAppDelegate
中可能存在错误的初始化:
var httpRequestOperationManager: AFHTTPRequestOperationManager? // JAVA SERVER Client
class func appDelegate() -> AppDelegate {
return UIApplication.sharedApplication().delegate as AppDelegate
}
func configureWebservice() {
let requestSerializer = AFJSONRequestSerializer()
requestSerializer.setValue("1234567890", forHTTPHeaderField: "clientId")
requestSerializer.setValue("Test", forHTTPHeaderField: "appName")
requestSerializer.setValue("1.0.0", forHTTPHeaderField: "appVersion")
let responseSerializer = AFJSONResponseSerializer()
AFNetworkActivityIndicatorManager.sharedManager().enabled = true
// ##### HTTP #####
let baseURL = NSURL(string: "http://data.wien.gv.at");
httpRequestOperationManager = AFHTTPRequestOperationManager(baseURL: baseURL))
httpRequestOperationManager!.requestSerializer = requestSerializer
httpRequestOperationManager!.responseSerializer = responseSerializer
}
任何关于我做错了什么的建议?Swift与Objective-C代码完全兼容,因此您的问题与Swift本身无关。在
AFNetworking
中,responseObject
有时可能是nil
。这包括以下情况:
- A
状态代码204未返回任何内容
- 如果输出流被设置为写入文件
- 如果验证期间的错误不是
(例如,不可接受的内容类型)nsurErrorCannotDecodeContentData
查看并获取更多信息。您可以使用Swift与Objective-C框架的互操作性,但现在有了一个官方图书馆,让我们来查看一下: 此库是用AFNetworking的创建者提供的本机Swift编写的。当你搬到斯威夫特时,你可能会想寻找这种东西。我试过了,它很棒,就像它的前身一样
HttpManager.sharedInstance.getNewestAppList("\(self.numberofPhoto)", offset: "0", device_type: "ios",search: self.strSearch, filter: self.strFilter, onCompletion: { (responseObject: NSDictionary?, error: NSError?) -> Void in
if error != nil {
SwiftLoader.hide()
self.showAlertWithMessage("\(error!.localizedFailureReason!)\n\(error!.localizedRecoverySuggestion!)")
} else {
SwiftLoader.hide()
if responseObject!.valueForKey("status") as! NSString as String == "0" {
self.showAlertWithMessage(responseObject!.valueForKey("message") as! NSString as String)
} else {
self.itemsArray = responseObject!.valueForKey("data") as! NSArray
print(self.itemsArray.count)
self.tableCategoryDetailRef.reloadData()
}
}
})
谢谢你的提示…看来我的基本初始化是错误的。我还不知道为什么。我将信息添加到我的原始帖子中,这是一个与服务器相关的问题->我尝试了其他URL,结果成功了。谢谢我强烈建议您使用网络,而不是AFB。它是在和为Swift完全重写的AFN的继任者。
import Foundation
typealias getResponse = (NSDictionary?, NSError?) -> Void
class HttpManager: NSObject {
var AFManager: AFURLSessionManager?
var strUrl: NSString = "url"
class var sharedInstance:HttpManager {
struct Singleton {
static let instance = HttpManager()
}
return Singleton.instance
}
// MARK: - Method
func getCount(device_type:String, onCompletion: getResponse) -> Void {
let post: String = "device_type=\(device_type)"
let postData: NSData = post.dataUsingEncoding(NSASCIIStringEncoding, allowLossyConversion: true)!
let postLength:NSString = String(postData.length)
let configuration: NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
AFManager = AFURLSessionManager(sessionConfiguration: configuration)
let URL: NSURL = NSURL(string: "\(strUrl)/count" as String)!
let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: URL)
urlRequest.HTTPMethod = "POST"
urlRequest.setValue(postLength as String, forHTTPHeaderField: "Content-Length")
urlRequest.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
urlRequest.HTTPBody = postData
let task = AFManager?.dataTaskWithRequest(urlRequest) { (data, response, error) in
if response == nil {
SwiftLoader.hide()
} else {
let responseDict:NSDictionary = response as! NSDictionary
onCompletion(responseDict,error)
}
}
task!.resume()
}
}