我在找不到 Swift4 时加载 json 数据时遇到问题,为啥?

Posted

技术标签:

【中文标题】我在找不到 Swift4 时加载 json 数据时遇到问题,为啥?【英文标题】: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"] 【参考方案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


【讨论】:

以上是关于我在找不到 Swift4 时加载 json 数据时遇到问题,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

Swift4:从文件中解码 json 时出错

Swift 4:UITableViewCell 在初始加载时不会显示数据,但会在第二次加载时加载

当我在 Xcode 11 中将 swift 4.2 转换为 swift 5 时继续加载

Python list.index 在找不到索引时抛出异常

TableView 没有加载任何 JSON 数据 Swift 4

奇怪的 Swift 4 类型系统