使用NSPredicate过滤属性上的对象数组

Nic*_*rbo 2 arrays filtering nspredicate swift

我有一系列的工作室.每个工作室都有一个名为studioName的属性.

我需要我的搜索字段来过滤工作室,基于studioName,由用户应用于搜索字段.

这是我目前的代码:

var studios = [Studio]()
var filteredStudios = [Studio]()
var studiosToDisplay = [Studio]()

func updateSearchResultsForSearchController(searchController: UISearchController) {
    let searchText = searchController.searchBar.text

    print("SEARCH TEXT: \(searchText)")

    if searchText == nil || searchText!.isEmpty {
        studiosToDisplay = studios
        self.resultTableView.reloadData()
        NSNotificationCenter.defaultCenter().postNotificationName("showResultsBeforeSearchingNotification", object: nil) //Calls SearchVC
    } else {
        studiosToDisplay.removeAll()
        let searchPredicate = NSPredicate(format: "studioName CONTAINS[c] %@", searchText!)
        let array = (self.studios as NSArray).filteredArrayUsingPredicate(searchPredicate)
        studiosToDisplay = array as! [Studio]
        self.resultTableView.reloadData()
    }
}
Run Code Online (Sandbox Code Playgroud)

它现在只是没有工作..它过滤了,但无论我放在搜索域中,我每次都会留下同样的工作室.

我想我需要知道谓词,每次都必须查看数组中的单个对象.但我无法弄清楚如何.我尝试在格式中添加"ANY",但这会导致我的应用崩溃.

Ale*_*ica 9

这不必要地复杂.这里没有必要NSPredicate.

var studios = [Studio]()
var filteredStudios = [Studio]()
var studiosToDisplay = [Studio]()

func updateSearchResultsForSearchController(searchController: UISearchController) {
    let searchText = searchController.searchBar.text

    print("SEARCH TEXT: \(searchText)")

    if let searchText = searchText, !searchText.isEmpty {
        studiosToDisplay = studios.filter{ $0.studioName.contains(searchText) }
    }
    else {
        studiosToDisplay = studios
        NSNotificationCenter.defaultCenter().postNotificationName("showResultsBeforeSearchingNotification", object: nil) //Calls SearchVC
    }

    self.resultTableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)