sendAsynchronousRequest was deprecated in iOS 9, How to alter code to fix

后端 未结 10 2165
长发绾君心
长发绾君心 2020-12-04 15:48

Below is my code I am getting the issue with:

func parseFeedForRequest(request: NSURLRequest, callback: (feed: RSSFeed?, error: NSError?) -> Void)
{
    N         


        
相关标签:
10条回答
  • 2020-12-04 16:05

    Swift 4.2

    This worked for me:

    func loadImageFromURL(URL: NSURL) {
        let request = URLRequest(url: URL as URL)
        let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
            if let imageData = data {
                DispatchQueue.main.async {
                    self.imageView.image = UIImage(data: imageData)
                }
            }
        }
        task.resume()
    }
    

    I had to add "DispatchQueue.main.async { }" because I had a runtime warning, since only the main thread is supposed to modify UI elements.

    0 讨论(0)
  • 2020-12-04 16:11

    with swift 3.1

    let request = NSMutableURLRequest(url: NSURL(string: image_url_string)! as URL)
        let session = URLSession.shared
        request.httpMethod = "POST"
    
        let params = ["username":"username", "password":"password"] as Dictionary<String, String>
    
        request.httpBody = try? JSONSerialization.data(withJSONObject: params, options: [])
    
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
        request.addValue("application/json", forHTTPHeaderField: "Accept")
    
        let task = session.dataTask(with: request as URLRequest, completionHandler: {data, response, error -> Void in
            print("Response: \(String(describing: response))")})
    
        task.resume()
    
    0 讨论(0)
  • 2020-12-04 16:14

    Swift 2.0:

    Old (replace with New below):

    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue()) { (response, data, error) -> Void in
    
    // Code
    
    }
    

    New:

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request){ data, response, error in
    
    // Code
    
    }
    task.resume()
    
    0 讨论(0)
  • 2020-12-04 16:18

    Use NSURLSession instead like below,

    For Objective-C

    NSURLSession *session = [NSURLSession sharedSession];
    [[session dataTaskWithURL:[NSURL URLWithString:"YOUR URL"]
              completionHandler:^(NSData *data,
                                  NSURLResponse *response,
                                  NSError *error) {
                // handle response
    
      }] resume];
    

    For 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()
    

    For asynchronously query, from Apple docs

    Like most networking APIs, the NSURLSession API is highly asynchronous. It returns data in one of two ways, depending on the methods you call:

    To a completion handler block that returns data to your app when a transfer finishes successfully or with an error.

    By calling methods on your custom delegate as the data is received.

    By calling methods on your custom delegate when download to a file is complete.

    0 讨论(0)
  • 2020-12-04 16:19

    Here is the SWIFT3.0 Version of Nilesh Patel's Answer with JSONSerialised data

    let url = URL(string: "<HERE GOES SERVER API>")!
                var request = URLRequest(url: url)
                request.httpMethod = "POST" //GET OR DELETE etc....
                request.setValue("application/json", forHTTPHeaderField: "Content-Type")
                request.setValue("<ValueforAuthorization>", forHTTPHeaderField: "Authorization")
                let parameter = [String:Any]() //This is your parameters [String:Any]
                do {
                    let jsonData = try JSONSerialization.data(withJSONObject: parameter, options: .prettyPrinted)
                    // here "jsonData" is the dictionary encoded in JSON data
                    request.httpBody = jsonData
                    let session = URLSession(configuration: .default)
                    let task = session.dataTask(with: request, completionHandler: { (incomingData, response, error) in
                        if let error = error {
                            print(error.localizedDescription)
                            print(request)
                        }else if let response = response {
                            print(response)
                        }else if let incomingData = incomingData {
                            print(incomingData)
                        }
                    })
                    task.resume()
    
                } catch {
                    print(error.localizedDescription)
                }
    
    0 讨论(0)
  • 2020-12-04 16:20

    Swift 4

    let params = ["email":"email@email.com", "password":"123456"] as Dictionary<String, String>
    
    var request = URLRequest(url: URL(string: "http://localhost:8080/api/1/login")!)
    request.httpMethod = "POST"
    request.httpBody = try? JSONSerialization.data(withJSONObject: params, options: [])
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    
    let session = URLSession.shared
    let task = session.dataTask(with: request, completionHandler: { data, response, error -> Void in
    
        do {
            let json = try JSONSerialization.jsonObject(with: data!) as! Dictionary<String, AnyObject>
            print(json)
        } catch {
            print("error")
        }
    
    })
    
    task.resume()
    
    0 讨论(0)
提交回复
热议问题