gpt4 book ai didi

json - 数据未被搜索栏过滤

转载 作者:可可西里 更新时间:2023-11-01 01:59:55 25 4
gpt4 key购买 nike

我正在尝试使用搜索栏过滤我获取的 JSON 数据。但是,当我在搜索栏中输入内容时,它什么也不做。数据仍然在同一个地方并且没有被过滤,而当我在搜索栏中输入内容时它应该被动态过滤。

下面的代码显示了我的 TableViewController 以及将 JSON 数据提取到我的数组中的函数。然后使用搜索栏对其进行过滤,只要数据名称与搜索栏中的条件匹配,就会将其添加到名为“filteredExercise”的第二个数组中。

import UIKit

class ExerciseTableViewController: UITableViewController, UISearchBarDelegate {

var fetchedExercise = [Exercise]()
var filteredExercise = [Exercise]()
var inSearchMode = false

@IBOutlet var searchBar: UITableView!


override func viewDidLoad() {
super.viewDidLoad()

searchBar.delegate = self

parseData()

}


func parseData() {

fetchedExercise.removeAll()

let urlPath = "https://wger.de/api/v2/exercise/?format=json&language=2&status=2&limit=200"
let url = URL(string: urlPath)!

let task = URLSession.shared.dataTask(with: url) { (data, response, error) in

if error != nil {
print("Error while parsing JSON")
}
else {

do {
if let data = data,
let fetchedData = try JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as? [String:Any],
let exercises = fetchedData["results"] as? [[String: Any]] {


for eachExercise in exercises {
if eachExercise["license_author"] as! String == "wger.de" {
let name = eachExercise["name"] as! String
let description = eachExercise["description"] as! String
let id = eachExercise["id"] as! Int

self.fetchedExercise.append(Exercise(name: name, description: description, id: id))
}
}


DispatchQueue.main.async {
self.tableView.reloadData()
}
}
}
catch {
print("Error while parsing data.")
}
}
}
task.resume()
}



// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows

if inSearchMode {

return filteredExercise.count
}

return fetchedExercise.count
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: "ExerciseCell", for: indexPath) as? ExerciseCell {

let exercise: Exercise!

if inSearchMode {

exercise = filteredExercise[indexPath.row]
cell.configureCell(exercise: exercise)

} else {

exercise = fetchedExercise[indexPath.row]
cell.configureCell(exercise: exercise)
}

return cell

} else {

return UITableViewCell()
}


}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {


var exercise: Exercise!

exercise = fetchedExercise[indexPath.row]

performSegue(withIdentifier: "exerciseDetailVC", sender: exercise)
}


func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

if searchBar.text == nil || searchBar.text == "" {

inSearchMode = false
self.tableView.reloadData()

} else {

inSearchMode = true

let lower = searchBar.text!.lowercased()

filteredExercise = fetchedExercise.filter({$0.name.range(of: lower) != nil})
self.tableView.reloadData()
}
}



}

最佳答案

看起来你有错误?

@IBOutlet var searchBar: UITableView!

我觉得应该是UISearchBarController的类型。

关于json - 数据未被搜索栏过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47501481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com