我在找不到 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 数据时遇到问题,为啥?的主要内容,如果未能解决你的问题,请参考以下文章
Swift 4:UITableViewCell 在初始加载时不会显示数据,但会在第二次加载时加载
当我在 Xcode 11 中将 swift 4.2 转换为 swift 5 时继续加载