以下是我遇到的代码:
func parseFeedForRequest(request: NSURLRequest, callback: (feed: RSSFeed?, error: NSError?) -> Void) { NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) { (response, data, error) -> Void in if ((error) != nil) { callback(feed: nil, error: error) } else { self.callbackClosure = callback let parser : NSXMLParser = NSXMLParser(data: data!) parser.delegate = self parser.shouldResolveExternalEntities = false parser.parse() } } }
从iOS 9开始不推荐使用此方法,并告诉我改用dataTaskWithRequest。有人可以帮我用dataTask更改sendAsync,我不知道该怎么做。
NSURLSession像下面这样使用,
NSURLSession
对于Objective-C
NSURLSession *session = [NSURLSession sharedSession]; [[session dataTaskWithURL:[NSURL URLWithString:"YOUR URL"] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { // handle response }] resume];
对于Swift,
var request = NSMutableURLRequest(URL: NSURL(string: "YOUR URL")!) var session = NSURLSession.sharedSession() request.HTTPMethod = "POST" var params = ["username":"username", "password":"password"] as Dictionary<String, String> request.HTTPBody = try? NSJSONSerialization.dataWithJSONObject(params, options: []) request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.addValue("application/json", forHTTPHeaderField: "Accept") var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in print("Response: \(response)")}) task.resume()
对于异步查询,来自Apple 文档
与大多数网络API一样,NSURLSession API是高度异步的。根据您调用的方法,它以两种方式之一返回数据: 到完成处理程序块,该块在传输成功完成或发生错误时将数据返回到您的应用程序。 通过在接收数据时在自定义委托上调用方法。 下载到文件完成后,通过在自定义委托上调用方法。
与大多数网络API一样,NSURLSession API是高度异步的。根据您调用的方法,它以两种方式之一返回数据:
到完成处理程序块,该块在传输成功完成或发生错误时将数据返回到您的应用程序。
通过在接收数据时在自定义委托上调用方法。
下载到文件完成后,通过在自定义委托上调用方法。