0
검색 결과 테이블 뷰를 가져 와서 내용을 업데이트하는 데 어려움을 겪고 있습니다. 쿼리하려는 데이터가 Parse에서옵니다. 내 기록에 나타납니다. 그러나 UISearchBar에 무언가가 입력되면 searchResultsTableView는 필터링 된 결과를 표시하지 않습니다. 내가 뭘 놓치고 있니? 감사합니다! Swift UISearchBar Parse 구현
코드 :import UIKit
class DrinkSearchTableViewController: UITableViewController, UISearchBarDelegate {
var cocktails:NSMutableArray = NSMutableArray()
var filteredCocktails:NSMutableArray = NSMutableArray()
@IBOutlet var searchBar: UISearchBar! = UISearchBar()
override func viewDidLoad() {
super.viewDidLoad()
self.searchBar.delegate = self
}
override func viewDidAppear(animated: Bool) {
if self.tableView == self.searchDisplayController?.searchResultsTableView {
loadFilteredData(" ")
} else {
loadData()
}
}
func searchBarShouldBeginEditing(searchBar: UISearchBar!) -> Bool {
return true
}
func searchBarShouldEndEditing(searchBar: UISearchBar!) -> Bool {
return true
}
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
loadFilteredData(" ")
}
func searchBar(searchBar: UISearchBar!, textDidChange searchText: String!) {
loadFilteredData(searchText)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if self.tableView == self.searchDisplayController?.searchResultsTableView {
return filteredCocktails.count
}
else {
return cocktails.count
}
}
override func tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath?) -> UITableViewCell {
let cell = self.tableView!.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath!) as DrinkSeachTableViewCell
if self.tableView == self.searchDisplayController?.searchResultsTableView {
let cocktail:PFObject! = self.filteredCocktails.objectAtIndex(indexPath!.row) as PFObject
let theCocktail = cocktail.objectForKey("Name") as String?
cell.drinkNameLabel.text = theCocktail as String!
} else {
let cocktail:PFObject! = self.cocktails.objectAtIndex(indexPath!.row) as PFObject
let theCocktail = cocktail.objectForKey("Name") as String?
cell.drinkNameLabel.text = theCocktail as String!
}
return cell
}
func loadFilteredData(name:String){
filteredCocktails.removeAllObjects()
var query : PFQuery = PFQuery(className: "Cocktail")
query.whereKey("Name", containsString: name)
query.limit = 50
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]!, error: NSError!) -> Void in
if error == nil {
for object in objects{
let cocktail:PFObject! = object as PFObject
println(cocktail.objectForKey("Name"))
self.filteredCocktails.addObject(cocktail as PFObject)
self.tableView.reloadData()
}
} else {
}
}
}
func loadData() {
cocktails.removeAllObjects()
var query : PFQuery = PFQuery(className: "Cocktail")
query.limit = 50
query.findObjectsInBackgroundWithBlock{
(objects:[AnyObject]!, error:NSError!) ->Void in
if error == nil {
// The find succeeded.
NSLog("Successfully retrieved \(objects.count) drinks.")
// Do something with the found objects
for object in objects{
self.cocktails.addObject(object as PFObject)
}
self.tableView.reloadData()
} else {
// Log details of the failure
println("Error getting data")
}
}
}
}