Ayrıştırma veritabanımdaki tüm kullanıcıları, kullanıcı adlarını veya adlarını aramaya çalışıyorum. Şimdiye kadar aramalar ancak ilk harfi tanımıyor ... Bu sadece ikinci harfin yazılmasından sonra arama yapmaya başlar ve bir kez yazıldıktan sonra ilk harfi arar ...Parse.com Swift ile arama özelliği Swift
İşte benim sorgum Eğer kimse problemi görebiliyorsa yardımını çok isterim!
Daha fazla açıklama yapmak için yorum bırakın ... Çok teşekkürler.
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()
}
})
DÜZENLEME Bu yüzden yukarıdaki kodu kaldırıldı ve bu ekledi:
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()
}
Yüklemedeki yüklenen nesnelerin tümünü indirmenizi öneririm. Ardından, kullanıcı aramalarını filtreleyin. – penatheboss
Bu kaç giriş sayısına bağlı olarak bazı ciddi ek yük olabilir ... –
@penatheboss Kullanıcıların bir sürü olabileceği gibi iyi bir yaklaşım olacağını düşünmüyorum .... –