您好我一直在观看视频来执行此代码但是没有任何工作我尝试了解代码并且仍然没有解决问题。问题是我没有任何错误,当我运行代码时,它没有在tableView中显示结果。我想要做的是我想在解析用户列表中搜索。 这是代码:
func searchBarSearchButtonClicked(searchBar: UISearchBar){
searchBar.resignFirstResponder()
print("search word =\(searchBar.text)")
let usernameQuery = PFQuery(className: "User")
usernameQuery.whereKey("username", containsString: searchBar.text)
usernameQuery.findObjectsInBackgroundWithBlock {
(results: [PFObject]?, error: NSError?) -> Void in
if error != nil {
let myAlert = UIAlertController(title:"Alert", message:error?.localizedDescription, preferredStyle:UIAlertControllerStyle.Alert)
let okAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil)
myAlert.addAction(okAction)
self.presentViewController(myAlert, animated: true, completion: nil)
return
}
if let objects = results! as? [PFObject]{
self.searchResults.removeAll(keepCapacity: false)
for object in objects{
let usernameid = object.objectForKey("username") as! String
self.searchResults.append(usernameid)
}
dispatch_async(dispatch_get_main_queue()){
self.myTable.reloadData()
self.mySearchBar.resignFirstResponder()
}
}
}
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
let myCell = tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath)
myCell.textLabel?.text = searchResults[indexPath.row]
return myCell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
mySearchBar.resignFirstResponder()
}
func searchBarCancelButtonClicked(searchBar: UISearchBar){
mySearchBar.resignFirstResponder()
mySearchBar.text = ""
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return searchResults.count
}
}
答案 0 :(得分:0)
您没有从UISearchBar
打开搜索字符串。
查看Apple's official documentation for UISearchBar
时,可以看出text
属性属于String?
类型。
使用这些知识查看代码时,由于您没有执行任何类型的展开,因此以下行看起来有点可疑:
usernameQuery.whereKey("username", containsString: searchBar.text)
这可以通过简单的游乐场测试进一步研究:
import UIKit
let searchBar = UISearchBar()
searchBar.text = "Kumuluzz"
let output = searchBar.text
print("Output: \(output)")
此游乐场的输出(见右侧边栏)如下:
"Output: Optional("Kumuluzz")\n"
这意味着我的用户名必须为Optional("Kumuluzz")
才能与User
基础中的查询相匹配。
总而言之,在text
属性上应用某种解包方式。