Я пытаюсь найти функцию поиска в своем приложении. Поиск в основном будет искать пользовательский ввод в классе Parse в бэкэнд.Swift - Search Bar Начальная загрузка
До сих пор приведенный ниже код очень хорошо работает для моего случая, за исключением того, что, как только изображение загружается (до начала ввода чего-либо), он загружает все имена пользователей в бэкэнде в строках таблицы. Когда пользователь набирает буквы, он фильтрует. Я хочу иметь все те же функциональные возможности, за исключением отображения всех пользователей в строках таблицы, как только загружается представление. Как это можно достичь?
class FriendByUsernameTableViewController: UITableViewController, UISearchBarDelegate, UISearchDisplayDelegate {
var friendObject = FriendClass()
@IBOutlet weak var searchBar: UISearchBar!
var searchActive : Bool = false
var data:[PFObject]!
var filtered:[PFObject]!
override func viewDidLoad() {
super.viewDidLoad()
self.searchBar.delegate = self
search()
}
func search(searchText: String? = nil){
let query = PFQuery(className: "_User")
if(searchText != nil){
query.whereKey("appUsername", containsString: searchText)
}
query.findObjectsInBackgroundWithBlock { (results, error) -> Void in
self.data = results as? [PFObject]!
self.tableView.reloadData()
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table view data source
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if(self.data != nil){
return self.data.count
}
return 0
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell
let obj = self.data[indexPath.row]
cell.textLabel!.text = obj["appUsername"] as? String
return cell
}
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
searchActive = true;
}
func searchBarTextDidEndEditing(searchBar: UISearchBar) {
searchActive = false;
}
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
searchActive = false;
}
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
searchActive = false;
}
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
search(searchText)
}
}
код основан на этом руководстве: http://shrikar.com/parse-search-in-ios-8-with-swift/
Это не собирается решить проблему под рукой. Проблема в том, что просмотр загружается с отображением результатов уже там, где я хочу, чтобы он показывал только результаты, когда поле поиска получило имя пользователя –
@ksa_coder См. Мое редактирование. Вызывая 'search()' в 'viewDidLoad()', вы выполняете запрос и загружаете массив с объектами, не сравнивая имя пользователя с searchText, и, следовательно, ваш TableView отобразит всех пользователей в вашем классе пользователей. – NotMe
Привет. Простите за поздний ответ. Пробовал ваш код выше, и это привело к ошибке: фатальная ошибка: неожиданно найденный nil при разворачивании необязательного значения –