gpt4 book ai didi

ios - 无法使用 whereKey 为 textDidChange 搜索两个字符串对象

转载 作者:行者123 更新时间:2023-11-29 02:24:21 29 4
gpt4 key购买 nike

我有一个 tableView,我正在其中从 Parse 加载我的数据。现在我想使用 parse 来显示来自 searchBar.text 的搜索结果。我有名字和姓氏,我都想在其中搜索。问题是我不知道如何在类中查询搜索 2 个对象并在 tableView 中显示过滤的匹配项.它完全适用于一个对象。

我尝试执行 2 个 whereKey 方法但都失败了,它只会显示对象的两个首字母开头的单元格;示例:约翰·约翰森

希望我说清楚了我的问题。

更新 2:

class TableViewController: UITableViewController, UISearchBarDelegate {

@IBOutlet var searchBar: UISearchBar! = UISearchBar()

var timeLineData:NSMutableArray = NSMutableArray()

override func viewDidLoad() {
super.viewDidLoad()

searchBar.delegate = self

....
}

func loadData(name:String){
timeLineData.removeAllObjects()

var firstName = PFQuery(className: "Newfamilie")
firstName.whereKey("voornaam", containsString: name)

var lastName = PFQuery(className: "Newfamilie")
lastName.whereKey("achternaam", containsString: name)

var query = PFQuery.orQueryWithSubqueries([firstName, lastName])
query.orderByAscending("achternaam")
query.limit = 200
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]!, error: NSError!) -> Void in
if error == nil {

for object in objects{
let naam:PFObject = object as PFObject
self.timeLineData.addObject(naam)
}

self.tableView.reloadData()
self.refreshTimeLineControl.endRefreshing()

println("\(self.timeLineData.count)")
}
}
}

override func viewDidAppear(animated: Bool) {
self.loadData("")
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return timeLineData.count
}

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
loadData(searchText)
}

func searchBarCancelButtonClicked(searchBar: UISearchBar) {
loadData("")
}

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

let persoon:PFObject = self.timeLineData.objectAtIndex(indexPath!.row) as PFObject
let voornaam = persoon.objectForKey("voornaam") as String
let achternaam = persoon.objectForKey("achternaam") as String

cell.textLabel.text = "\(voornaam) \(achternaam)"

return cell
}

最佳答案

问题是您搜索的要求是名字和姓氏必须包含字符串才能得到结果。您需要组合两个 PFQuery 实例 - 这将为您提供 voornaamachternaam 的结果,而不是 AND。

var firstName = PFQuery(className: "Newfamilie")
firstName.limit = 200
firstName.orderByAscending("achternaam")
firstName.whereKey("voornaam", containsString: name)
var lastName = PFQuery(className: "Newfamilie")
lastName.limit = 200
lastName.orderByAscending("achternaam")
lastName.whereKey("achternaam", containsString: name)

var query = PFQuery.orQueryWithSubqueries([firstName, lastName])
query.findObjectsInBackgroundWithBlock {
(results: [AnyObject]!, error: NSError!) -> Void in
if error == nil {
// Results will be data containing the string "name" in "voornaam" OR "achternaam"
for object in objects{
let naam:PFObject = object as PFObject
self.timeLineData.addObject(naam)
}

self.tableView.reloadData()

println("\(self.timeLineData.count)")
}
}

关于ios - 无法使用 whereKey 为 textDidChange 搜索两个字符串对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27732545/

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