响应数据为零

response Data is nil

我正在获取响应数据 nil

func fetchSinglePageData() {
    var response: NSData?
    var errors: NSError?
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {

        response = NSData(contentsOfFile:"url...?project_id=(self.projectID)&project_page=Request", options: NSDataReadingOptions(0), error: &errors)

        print("LatestURL Single page:(response)")

        if response == nil {
            var alertview = UIAlertView(title: "Network Error", message: "Data not received due to network connection.Try again...", delegate: self, cancelButtonTitle: "Ok")
            alertview.show()
        }
        else{
            let jsonDict: NSDictionary = NSJSONSerialization.JSONObjectWithData(response!, options: nil, error: &errors) as NSDictionary
            print("JSON Response Single page:(jsonDict)")
            var statuses = [NSObject : AnyObject]()
            self.lblstartTime?.text = jsonDict["start_time"] as? String
            self.lblcurrentStage?.text = jsonDict["current_stage"] as? String
            self.lblcompletionTime?.text = jsonDict["completion_time"] as? String
            self.lblManager?.text = jsonDict["manager"] as? String
        }
    })
}    

project_id 是从正确工作的前一页接收到的字符串。

快速浏览后,可能\缺少:

NSData(contentsOfFile:"url...?project_id=\(self.projectID)&project_page=Request"

这一行:

response   = NSData(contentsOfFile:"url...?project_id=(self.projectID)&project_page=Request", options: NSDataReadingOptions(0), error: &errors)

您有 project_id=(self.projectID),要使用插值,您应该有 project_id=\(self.projectID)

我建议您分离代码以生成完整的 URL,然后将 URL 打印到控制台并确保它符合您的预期。

然后你可以自己访问 url 并检查服务器 returns 是什么,然后一旦你知道你有正确的 URL 和响应你就可以反序列化了回应

编辑: 更新为 URL 会话(Swift 3 版本)

let defaultSession = URLSession(configuration: URLSessionConfiguration.default)
var dataTask: URLSessionDataTask?
let projectID = 12
let url = URL(string: "http://phpyouth.com/clients/halfpricedgrannyflats/app/app_response.php?project_id=\(projectID)&project_page=Request")

dataTask = defaultSession.dataTask(with: url!) {
    data, response, error in

    if let error = error {
        print(error.localizedDescription)
    } else if let httpResponse = response as? HTTPURLResponse {
        if httpResponse.statusCode == 200 {
            if let responseData = data {
                if let json = try? JSONSerialization.jsonObject(with: responseData, options: .allowFragments) as? [String:AnyObject] {
                    print(json)
                }
            }
        }
    }
}

dataTask?.resume()

在swift3

 //make a url request

 let urlString = "your_url"
 let urlRequest = URLRequest.init(url: URL.init(string: urlString)!, cachePolicy: .reloadIgnoringCacheData, timeoutInterval: 50)

  //create a session
  let session = URLSession.shared

  let task = session.dataTask(with: request) { (data, urlResponse, error) in
        if error != nil{
            //handle error
            return
        }else{
            if let responseData = data{
             let  jsonDict  = try JSONSerialization.jsonObject(with: responseData, options: [])as? [String:Any]
             //handle your response here

            }
        }
    }
  task.resume()

在swift2.2

    let urlString = "your_url"

    let request = NSURLRequest(URL: NSURL(string: urlString)!, cachePolicy: .ReloadIgnoringLocalCacheData, timeoutInterval: 50)

    let session = NSURLSession.sharedSession()

    let task = session.dataTaskWithRequest(request) { (data, response, error) in

        if error != nil{
            //handel error
            print(error!.localizedDescription)
            return
        }

        if let responseData = data{

            do{
                if  let jsonDict = try NSJSONSerialization.JSONObjectWithData(responseData, options: [])as? [String:Any]{

                    //you have data in json dict

                }

            }catch{
                print("error in parsing response")
                return
            }


        }
    }
    task.resume()
func singlePageData(){

    var errors: NSError?

    let urlString = "xyz.com"
    print("URL RESPONSE  \(urlString)")

    let request = NSURLRequest(URL: NSURL(string: urlString), cachePolicy: .ReloadIgnoringLocalCacheData, timeoutInterval: 50)

    let session = NSURLSession.sharedSession()

    let task = session.dataTaskWithRequest(request) { (data, response, error) in

        if error != nil{
            //handel error
            print(error!.localizedDescription)
            var alertview = UIAlertView(title: "Network Error", message: "Data not received due to network connection.Try again...", delegate: self, cancelButtonTitle: "Ok")
            alertview.show()
            return
        }

        if let responseData = data{

              var jsonDict: NSDictionary = NSJSONSerialization.JSONObjectWithData(responseData, options: NSJSONReadingOptions.MutableContainers, error: &errors) as NSDictionary!

            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {

            println("Json dict value  \(jsonDict)")
            self.lblprojectName?.text = jsonDict["name"] as? String
            println("lblprojectName:  \(self.lblprojectName?.text)")
            self.lblstartTime?.text = jsonDict["start_time"] as? String
             println("lblstartTime :  \(self.lblstartTime?.text)")
            self.lblcurrentStage?.text = jsonDict["current_stage"] as? String
             println("lblcurrentStage :  \(self.lblcurrentStage?.text)")
            self.lblcompletionTime?.text = jsonDict["completion_time"] as? String
             println("lblcompletionTime :  \(self.lblcompletionTime?.text)")
            self.lblManager?.text = jsonDict["manager"] as? String

            })

            }
        }
    task.resume()

}

这是我根据 Jitendra Solanki 的回答做出的回答,我对代码进行了更改,现在可以在 Swift 1.2

中使用