2014-09-03 1 views
2

i trie, чтобы найти пользователей синтаксического анализа через UISearchBar и отобразить результаты в виде таблицы. Когда я нагрел поиск, ничего не произошло ... Моя идея заключалась в использовании searchText.text в качестве запроса к PFUser.Swift iOS: поиск пользователей синтаксического анализа через UISearchBar и результаты dysplay в виде таблицы

Должен ли я попытаться использовать searchBar с контроллером дисплея поиска? Любая идея?

import UIKit 


    class AllFriendsTableViewController: UITableViewController, UISearchBarDelegate,  UISearchDisplayDelegate { 
@IBOutlet var SearchDisplay: UISearchDisplayController! 



var userList:NSMutableArray = NSMutableArray() 


func searchBarShouldBeginEditing(searchBar: UISearchBar!) -> Bool { 
    return true 
} 

func searchBarShouldEndEditing(searchBar: UISearchBar!) -> Bool { 
    return true 

} 

func searchBar(searchBar: UISearchBar!, textDidChange searchText: String!) { 
    loadUser() 
} 



@IBOutlet var searchText: UISearchBar! 



func loadUser() { 

    userList.removeAllObjects() 
    var findUser:PFQuery = PFUser.query() 
    findUser.whereKey("username", equalTo: searchText.text) 


    findUser.findObjectsInBackgroundWithBlock { (objects:[AnyObject]!, error:NSError!) -> Void in 
     if !(error != nil) { 
      // The find succeeded. 
      println("succesfull load Users") 
      // Do something with the found objects 
      for object in objects { 
       self.userList.addObject(object) 
       println("users added to userlist") 
      } 
      self.tableView.reloadData() 
     } else { 
      // Log details of the failure 
      println("error loadind user ") 
      println("error") 
     } 

    } 
} 


override func numberOfSectionsInTableView(tableView: UITableView!) -> Int { 
    return 1 
} 

override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int { 
    if tableView == searchDisplayController.searchResultsTableView { 
     return userList.count 
    } 
    else { 
     return 0 
    } 
} 



override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { 



    let cell: AllFirendsTableViewCell = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)as AllFirendsTableViewCell 


    let users:PFObject = self.userList.objectAtIndex(indexPath!.row) as PFObject 


    var findUserName:PFQuery = PFUser.query() 
    findUserName.whereKey("username", containsString: searchText.text) 



    findUserName.findObjectsInBackgroundWithBlock{ 
     (objects:[AnyObject]!, error:NSError!) -> Void in 

     if !(error != nil) { 

      if let user:PFUser = users as? PFUser { 
       cell.userNameTextField.text = user.username 
       println("user exist") 
       // define avatar poster 

       if let avatarImage:PFFile = user["profileImage"] as? PFFile { 
        avatarImage.getDataInBackgroundWithBlock{(imageData:NSData!, error:NSError!)-> Void in 

         if !(error != nil) { 

          let image:UIImage = UIImage(data: imageData) 


          cell.avatarImage.image = image as UIImage 
          cell.avatarImage.layer.cornerRadius = 24 
          cell.avatarImage.clipsToBounds = true 

         } 

        } 

       } 
       else { 
        cell.avatarImage.image = UIImage(named: "Avatar-1") 
        cell.avatarImage.layer.cornerRadius = 24 
        cell.avatarImage.clipsToBounds = true 
       } 
      } 

     } 


    } 

    return cell 

} 



override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(true) 
    navigationController.navigationBar.hidden = false 
    loadUser() 

} 


override func viewDidAppear(animated: Bool) { 

} 

override func viewDidLoad() { 


    // Do any additional setup after loading the view, typically from a nib. 
} 

}

+0

Вы должны искать пользователей при нажатии кнопки поиска, но в настоящее время вы делаете это в методе cellForRow. Это не верно. На сайте raywenderlich.com есть статья о поисковой панели. – Shmidt

+0

спасибо, но я все уже прочитал этот тату. Если я делаю это как raywenderlich.com, я должен загрузить весь пользователь синтаксического анализа, а затем отфильтровать результат. Я бы предпочел загружать только пользователей, которые соответствуют searchText.text. – jmcastel

+0

Извините, я ошибся. Я проверил ваш код, и все выглядит нормально. – Shmidt

ответ

0

Я подозреваю, что это может быть из-за вы пытаетесь перезагрузить TableView из фонового потока, что запрос сети происходит на. Обновления пользовательского интерфейса должны происходить из основного потока.

В вашей loadUser() функции попробуйте сделать свое Tableview перезарядки от основного потока, а именно:

NSOperationQueue.mainQueue().addOperationWithBlock({ 
    self.tableView.reloadData() 
}) 

Это может устранить проблему.

+0

Те, у кого: Блокировки: методы из синтаксического анализа запустили блок в основном потоке. – danh

Смежные вопросы