2014-09-03 57 views
2

查找通過UISearchBar解析用戶並在表格視圖中顯示結果。 當我加熱搜索時,什麼都沒有發生...... 我的想法是使用searchText.text作爲查詢PFUser。Swift iOS:通過UISearchBar查找解析用戶,並通過顯示編組結果查看錶結果

我應該嘗試使用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 2014-09-03 14:06:15

+0

謝謝,但我已經讀了這個tuto。如果我像raywenderlich.com那樣做,我必須下載所有解析用戶,然後過濾結果。我寧願只下載與searchText.text匹配的用戶。 – jmcastel 2014-09-03 15:41:42

+0

對不起,我錯了。我檢查了你的代碼,它看起來不錯。 – Shmidt 2014-09-03 17:33:41

回答

0

我懷疑這可能是由於您試圖重新從您的網絡請求發生在後臺線程的實現代碼如下。 UI更新應該從主線程發生。

在你loadUser()功能嘗試從主線程做你的tableview重裝,具體如下:

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

,可能會解決您的問題。

+0

那些withBlock:從解析方法運行主線程上的塊。 – danh 2014-12-07 17:25:27