gpt4 book ai didi

ios - 为什么我的 SearchController 只匹配第一个字符?

转载 作者:搜寻专家 更新时间:2023-11-01 07:31:45 24 4
gpt4 key购买 nike

我有像这样的字典格式的数据:

var data: [[String:AnyObject]] =

[
[
"id": "1",
"title": "A Title",
"Detail": "This is a String"
],
[
"id": "2",
"title": "A Title Again",
"Detail": "This is a String"
]
]

我的 TableViewController 列出了所有“标题”数据。

我正在为用户实现一个 SearchController 以仅从“标题”搜索特定数据。

我的代码似乎只显示匹配搜索查询中第一个字符的结果。

例如:如果用户输入“A”,则显示所有带有“A”的标题结果,但如果用户继续输入“A”(带空格),搜索结果中的所有内容都会消失。

这是我的尝试:

class TVC: UITableViewController, UISearchResultsUpdating {

let Search = data
var filteredSearch = [[String:AnyObject]]()
var resultSearchController = UISearchController()

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

if (self.resultSearchController.active)
{
return self.filteredSearch.count
}
else
{
return self.Search.count
}

}


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell?

if (self.resultSearchController.active)
{

cell!.textLabel?.text = (filteredSearch[indexPath.row]["title"] as! String)
return cell!
}
else
{
cell!.textLabel?.text = (Search[indexPath.row]["title"] as! String)
return cell!
}


}



func updateSearchResultsForSearchController(searchController: UISearchController)
{
self.filteredSearch.removeAll(keepCapacity: false)

let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)
let array = (self.Search as NSArray).filteredArrayUsingPredicate(searchPredicate)
self.filteredSearch = array as! [[String:AnyObject]]

self.tableView.reloadData()


}

最佳答案

你的谓词错了。现在的设置方式是,predicate 中的 self 指的是数组中的对象,它们是字典,而字典没有子字符串 :) 为了让它工作,我们必须告诉 predicate检查特定键下的值。这可以通过两种方式完成:

let searchPredicate = NSPredicate(format: "title CONTAINS[c] %@", searchController.searchBar.text!)
// OR
let searchPredicate = NSPredicate(format: "SELF[\"title\"] CONTAINS[c] %@", searchController.searchBar.text!)

这样,谓词将检查 title 键下的值是否包含搜索栏中的文本。

虽然我不知道为什么它只适用于单个字母。

关于ios - 为什么我的 SearchController 只匹配第一个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32160920/

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