2016-08-08 82 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!字符串 並讓數組=(self.searchPredicate作爲NSArray).filteredArrayUsingPredicate(searchPredicate)我明白爲什麼,但我不知道如何解決它。 – TheoF

+0

這是一個不同的問題。您試圖訪問謂詞,就好像它是一個數組,這顯然不起作用。 – ff10

+0

您可以將您的更改添加到原始問題中嗎? – ff10

相關問題