【发布时间】:2016-04-04 19:01:30
【问题描述】:
我正在尝试搜索我的解析数据库中的所有用户,无论是他们的用户名还是姓名。到目前为止,它正在搜索但不识别第一个字母......它只在输入第二个字母后开始搜索,一旦输入它就会搜索第一个字母......
这是我的问题,如果有人能看到问题,我很乐意得到您的帮助!
更多解释请发表评论...非常感谢。
func searchBar(searchBar: UISearchBar, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
let usernameQuery = PFQuery(className: "_User")
usernameQuery.addDescendingOrder("createdAt")
usernameQuery.limit = 20
usernameQuery.whereKey("username", matchesRegex: "(?i)" + self.searchBar.text!)
usernameQuery.findObjectsInBackgroundWithBlock ({ (objects:[PFObject]?, error:NSError?) -> Void in
if error == nil {
if objects!.isEmpty {
let fullnameQuery = PFUser.query()
fullnameQuery?.whereKey("firstname", matchesRegex: "(?i)" + self.searchBar.text!)
fullnameQuery?.findObjectsInBackgroundWithBlock({ (objects:[PFObject]?, error:NSError?) -> Void in
if error == nil {
self.search.removeAll(keepCapacity: false)
for object in objects! {
let name = SearchStruct(username: object.valueForKey("username") as! String,
fullname: object.valueForKey("firstname") as! String,
profileImage: object.valueForKey("profilePicture") as! PFFile)
self.search.append(name)
}
self.tableView1.reloadData()
}
})
}
self.search.removeAll(keepCapacity: false)
for object in objects! {
let user = SearchStruct(username: object.valueForKey("username") as! String,
fullname: object.valueForKey("firstname") as! String,
profileImage: object.valueForKey("profilePicture") as! PFFile)
self.search.append(user)
}
self.tableView1.reloadData()
textLabel.text = ""
self.activityS.stopAnimating()
}
})
编辑
所以我删除了上面的代码并添加了这个:
func updateSearchResultsForSearchController(searchController: UISearchController) {
// let searchText = searchController.searchBar.text
//Here the spinnier is initialized
activityS.frame = CGRect(x: 0, y: 0, width: 50, height: 50)
activityS.startAnimating()
let textLabel = UILabel(frame: CGRect(x: 60, y: 0, width: 300, height: 50))
textLabel.textColor = UIColor.grayColor()
textLabel.text = "Searching for \(searchBar.text!)"
self.view.addSubview(activityS)
self.view.addSubview(textLabel)
let usernameQuery = PFQuery(className: "_User")
usernameQuery.addDescendingOrder("createdAt")
usernameQuery.limit = 20
usernameQuery.whereKey("username", matchesRegex: "(?i)" + searchController.searchBar.text!)
usernameQuery.findObjectsInBackgroundWithBlock ({ (objects:[PFObject]?, error:NSError?) -> Void in
if error == nil {
if objects!.isEmpty {
let fullnameQuery = PFUser.query()
fullnameQuery?.whereKey("firstname", matchesRegex: "(?i)" + searchController.searchBar.text!)
fullnameQuery?.findObjectsInBackgroundWithBlock({ (objects:[PFObject]?, error:NSError?) -> Void in
if error == nil {
self.search.removeAll(keepCapacity: false)
for object in objects! {
let name = SearchStruct(username: object.valueForKey("username") as! String,
fullname: object.valueForKey("firstname") as! String,
profileImage: object.valueForKey("profilePicture") as! PFFile)
self.search.append(name)
}
self.tableView1.reloadData()
}
})
}
self.search.removeAll(keepCapacity: false)
for object in objects! {
let user = SearchStruct(username: object.valueForKey("username") as! String,
fullname: object.valueForKey("firstname") as! String,
profileImage: object.valueForKey("profilePicture") as! PFFile)
self.search.append(user)
}
self.tableView1.reloadData()
textLabel.text = ""
self.activityS.stopAnimating()
}
})
// Do your search and refresh the table
tableView1.reloadData()
}
【问题讨论】:
-
我建议下载视图中确实加载的所有对象。然后在用户搜索时过滤它们。
-
这可能是一些严重的开销,具体取决于他有多少条目......
-
@penatheboss 我认为这不是一个好方法,因为可能会有很多用户......
-
@KevinGoedecke Yeh,这就是我这样做的主要原因
-
你为什么不使用
UISearchResultsUpdating协议的updateSearchResultsForSearchController?
标签: swift uitableview parse-platform