swift中的搜索栏使用解析

时间:2016-01-22 03:51:32

标签: swift parse-platform uisearchbar

您好我一直在观看视频来执行此代码但是没有任何工作我尝试了解代码并且仍然没有解决问题。问题是我没有任何错误,当我运行代码时,它没有在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
}

}

1 个答案:

答案 0 :(得分:0)

TL; DR

您没有从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属性上应用某种解包方式。