ios - 我想知道为什么结果在表格视图中重复
问题描述
我通过 Web 服务器的 php 文件获取值。
我希望在搜索时从 DB 中获取结果。
我的代码现在有两个问题。
不包含在数据库中的值中的拼写也会产生结果。
结果反复出现。
首先,这是我得到的 json 结果。
[
{
"name" : "name1",
"id" : "1"
},
{
"name" : "name2",
"id" : "2"
},
{
"name" : "name3",
"id" : "3"
},
{
"name" : "name4",
"id" : "4"
},
{
"name" : "name5",
"id" : "5"
},
{
"name" : "name6",
"id" : "6"
},
{
"name" : "name7",
"id" : "7"
},
{
"name" : "name8",
"id" : "8"
},
{
"name" : "name9",
"id" : "9"
},
{
"name" : "name10",
"id" : "10"
},
{
"name" : "name11",
"id" : "11"
},
{
"name" : "name12",
"id" : "12"
}
]
但是在模拟器中,结果是这样的。
name1
name1
name2
name1
name2
name3
.
.
.
我想知道为什么结果会这样。
这是我的代码。
import UIKit
import Alamofire
import SwiftyJSON
class MyTableViewController: UITableViewController, UISearchBarDelegate {
var arrID = [String]()
var arrName = [String]()
var filteredData = [String]()
@IBOutlet weak var searchBar: UISearchBar!
@IBOutlet var mytableview: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
searchBar.delegate = self
self.mytableview.delegate = self
self.mytableview.dataSource = self
}
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
return filteredData.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell")! as UITableViewCell
cell.textLabel?.text = filteredData[indexPath.row]
return cell
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
let url = "http://url/name.php?name=" + searchText
print(url)
AF.request(url, method: .get).responseJSON { (myresponse) in
switch myresponse.result {
case .success:
let myresult = try? JSON(data: myresponse.data!)
print(myresult!)
let resultArray = myresult!
self.arrID.removeAll()
self.arrName.removeAll()
for i in resultArray.arrayValue {
let id = i["id"].stringValue
self.arrID.append(id)
let name = i["name"].stringValue
self.arrName.append(name)
self.filteredData.append(contentsOf: self.arrName)
}
if searchText == "" {
self.filteredData = []
} else {
for data in self.filteredData {
if data.lowercased().contains(searchText.lowercased()) {
self.filteredData.append(data)
}
}
}
self.mytableview.reloadData()
case .failure:
print(myresponse.error!)
}
}
}
}
解决方案
你可能想改变这个:
for i in resultArray.arrayValue {
let id = i["id"].stringValue
self.arrID.append(id)
let name = i["name"].stringValue
self.arrName.append(name)
self.filteredData.append(contentsOf: self.arrName)
}
对此:
for i in resultArray.arrayValue {
let id = i["id"].stringValue
self.arrID.append(id)
let name = i["name"].stringValue
self.arrName.append(name)
}
self.filteredData.append(contentsOf: self.arrName)
不过,我很困惑你为什么要这样做:
for data in self.filteredData {
if data.lowercased().contains(searchText.lowercased()) {
self.filteredData.append(data)
}
}
推荐阅读
- machine-learning - 特征嵌入和图像特征有什么区别?
- javascript -
请解释一下它在js中的含义 - r - 如何为成对 TukeyHSD 生成紧凑型字母显示
- c - GTK3 API:替换已弃用的 gtk_text_freeze API?
- angular - 如何发出发布请求以检查服务器是否从我的应用程序组件中以角度关闭
- python - 木偶指纹模拟
- c# - 如何将有关本地评估表达式的 EF Core 警告转换为错误?
- ios - 应用默认 ViewController 名称在 xcode 10.3 中没有改变
- regex - 如何使用 regx 识别无效模式?
- c# - ORA-6550 调用中的参数数量错误