2016-08-08 3 views
0

결과를 데이터베이스로 호출하는 검색을 구현하려고합니다. 나는 콘솔에서 데이터베이스 인쇄를 관리하지만 검색을 통해 액세스하지는 않습니다. 여기 'NSPredicate에는 아래 첨자 멤버가 없습니다.'

내가 사용하는 코드입니다 :

import UIKit 

class SearchTableViewController: UITableViewController, UISearchResultsUpdating { 

var searchPredicate = NSPredicate() 
var filteredAppleProducts = [String]() 
var resultSearchController = UISearchController!() 
var arrDataArticles: NSMutableArray! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.searchPredicate = NSPredicate(format: "SELF LIKE[c] %@", resultSearchController.searchBar.text!) 

    self.resultSearchController = UISearchController(searchResultsController: nil) 
    self.resultSearchController.searchResultsUpdater = self 

    self.resultSearchController.dimsBackgroundDuringPresentation = false 
    self.resultSearchController.searchBar.sizeToFit() 

    self.tableView.tableHeaderView = self.resultSearchController.searchBar 

    self.tableView.reloadData() 
    self.getAllArticles() 
} 

func getAllArticles() { 
    arrDataArticles = NSMutableArray() 
    arrDataArticles = ModelBD.getInstance().getAllArticles() 
} 

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.resultSearchController.active { 
     return self.filteredAppleProducts.count 
    } 
    else { 
     return 0 
    } 
} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell? 

    if self.resultSearchController.active { 
     cell!.textLabel?.text = self.filteredAppleProducts[indexPath.row] 
    } 
    else { 
     cell!.textLabel?.text = self.searchPredicate[indexPath.row] as! String 
    } 

    return cell! 
} 

func updateSearchResultsForSearchController(searchController: UISearchController) { 
    self.filteredAppleProducts.removeAll(keepCapacity: false) 

    let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!) 

    let array = (self.appleProducts as NSArray).filteredArrayUsingPredicate(searchPredicate) 

    self.filteredAppleProducts = array as! [String] 

    self.tableView.reloadData() 
} 


} 

유형 '자 NSPredicate는이 전혀 첨자 회원

오류가 라인에 나타납니다

cell!.textLabel?.text = self.searchPredicate[indexPath.row] as! String 

let array = (self.appleProducts as NSArray).filteredArrayUsingPredicate(searchPredicate) 

누구든지이 문제를 해결할 수 있습니다.

미리 감사드립니다.

+0

지금 대답의 내용이 사라 때문에 원래 대답을 편집하지 않아야합니다. – ff10

답변

0

이와 같은 상수에서 인스턴스 멤버를 사용할 수 없습니다. 귀하의 술어에서는 이미 resultSearchController의 존재를 가정합니다. 대신 viewDidLoad()에 술어를 초기화하거나 클래스를 초기화하는 동안 술어를 초기화 할 수 있습니다.

예컨대 :

var searchPredicate: NSPredicate? 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.searchPredicate = NSPredicate(format: "SELF LIKE[c] %@", resultSearchController.searchBar.text!) 

[...] 
+0

이제 두 셀 모두에서 "확인되지 않은 식별자 'searchPredicate 사용"오류가 발생했습니다! .textLabel? .text = self.searchPredicate [indexPath.row] as! 문자열 및 let array = (self.searchPredicate as NSArray) .filteredArrayUsingPredicate (searchPredicate) 이유를 이해하지만 어떻게 수정해야할지 모르겠다. – TheoF

+0

이것은 다른 문제입니다. 술어가 배열 인 것처럼 액세스하려고 시도하고 있는데, 이는 분명히 작동하지 않습니다. – ff10

+0

원래 질문에 변경 사항을 추가 할 수 있습니까? – ff10

관련 문제