Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 响应数据为零_Json_Swift_Nsdata - Fatal编程技术网

Json 响应数据为零

Json 响应数据为零,json,swift,nsdata,Json,Swift,Nsdata,我收到了响应数据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.project

我收到了响应数据
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\u 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\u id=(self.projectID)
,要使用插值,您应该有
project\u id=\(self.projectID)

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

然后,您可以自己访问url并检查服务器返回的内容,然后,一旦知道您有正确的url和响应,就可以对响应进行反序列化

编辑:使用URLSession更新(Swift 3版本)


在swift 3中

 //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()
在swift 2.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()

根据Jitendra Solanki的回答,这是我的回答。我已经对代码进行了更改,现在正在Swift 1.2中运行。使用URLSession从服务器获取数据。该url包含self.projectID,而不是实际的项目ID。您需要使用
\(self.projectID)
要将值传递到字符串中,那么输入projectID的新URL是什么?你有错误吗?您最好使用NSURLSessionI,因为您可以看到您使用的是旧版本的xcode和swift。我已经提供了一个例子,说明你如何做到这一点,但它在Swift 3中。我使用xcode 8。如果你计划将此应用程序推送到商店,你需要更新,我相信苹果已经停止支持iOS9及以下版本了。你为什么删除了接受的答案?这没有帮助吗?@DilipTiwari,我编辑了答案以便在swift 2.2中工作,所有版本的方法都是相同的,只是api方法的名称在swift 3中更改了。我认为在swift 1.2中不应该有太多的更改,您可以使用swift 2.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()

}