【问题标题】:I have a problem loading json data Swift4 when its not found, why?我在找不到 Swift4 时加载 json 数据时遇到问题,为什么?
【发布时间】:2019-03-23 13:14:36
【问题描述】:

当我的脚本要求服务器加载数据并接收到所需的数据时,一切顺利,但当它无法找到所需的数据时,我无法在其他方面做些什么。

func myJSON(sec:Int) {
    var request = URLRequest(url: URL(string: "https://xx.com/index.php")!)
    let postString = "sec=\(sec)"
    request.httpMethod = "POST"
    request.httpBody = postString.data(using: .utf8)
    request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")

    let task = URLSession.shared.dataTask(with: request) {
        data, response, error in
        if error == nil, let data = data {
            do {
                if let jsonData = try JSONSerialization.jsonObject(with: data, options: []) as? [[String:String]] {
                    for item in jsonData {
                        if let sec = item["sec"] {
                                self.myArray_sec.append(sec)

                                DispatchQueue.main.async {

                                        self.myTable!.reloadData()
                                        //It is happening here and things are going well
                                        self.myTable!.tableFooterView?.isHidden = true

                                }

                        }else if let error = item["error"]{

                            DispatchQueue.main.async {
                                print("error: ",error)
                                //But here it cannot be done
                                self.myTable!.tableFooterView?.isHidden = true

                            }
                        }
                    }
                }
            } catch let error as NSError {
                print("error: ",error)
            }
        }
    }
    task.resume()
}

打印错误:无数据

PHP 代码有效

 $result = mysqli_query($con,"SELECT * FROM `myTable` WHERE `sec`='".$_POST['sec']."';");

    while($data = mysqli_fetch_assoc($result)) {
         $rows[] = $data;
    }

    if ($rows[0]['sec'] != "") {
        print json_encode($rows);
    } 
    else {
        print '[{"error":"no Data"}]';
    }

【问题讨论】:

  • 请详细说明“未找到数据:我无能为力”。脚本是否挂起/变得无响应?任何错误日志?如果是这样,请通知我们。
  • do { 行之前插入print(String(data: data, encoding: .utf8)!) 并检查你得到了什么。
  • 脚本响应但无法执行不存在数据的指示
  • 我设置了 print(String(data: data, encoding: .utf8)!) 输出 [{"error":"no Data"}]

标签: uitableview swift3 swift4


【解决方案1】:

问题已通过计时器解决

}else if let error = item["error"]{

     DispatchQueue.main.async {
          print("error: ",error)

          let myTimer = Timer.scheduledTimer(timeInterval: 2,
                                             target: self,
                                             selector: #selector(self.refresh),
                                             userInfo: nil,
                                             repeats: false)

     }
 }


@objc func refresh() {

    self.myTable!.tableFooterView?.isHidden = true

}

【讨论】:

    猜你喜欢
    • 2018-09-05
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-02
    相关资源
    最近更新 更多