UISearchController搜索两个数组

时间:2015-08-18 17:40:13

标签: ios arrays swift uisearchcontroller

如何使用UISearchController搜索两个不同的数组并根据该搜索创建两个新的过滤数组?参数应该只要求一个数组包含字符串,然后如果其中一个数组包含它,则应添加两个索引。截至目前,我使用

func updateSearchResultsForSearchController(searchController: UISearchController)
{
    filteredKeys.removeAll(keepCapacity: false)
    filteredValues.removeAll(keepCapacity: false)

    let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text)
    let array = (values as NSArray).filteredArrayUsingPredicate(searchPredicate)
    println(array)
    let arrayTwo = (keys as NSArray).filteredArrayUsingPredicate(searchPredicate)



    filteredKeys = arrayTwo as! [String]
    filteredValues = array  as! [String]

    self.tableView.reloadData()
}

但是,这非常糟糕,并且由于过滤后的数组的数量不同而经常会崩溃应用程序。请帮忙,我已经坚持了一段时间。

搜索应该查看内容:

arrayOne = ["title1", "title2", "title3]
arrayTwo = ["message1", "message2", "message3]

并且应该根据搜索title1过滤数组

arrayOneFiltered = ["title1"]
arrayTwo = ["message1"]

有人可以帮我解决谓词字符串和过滤吗?

同样,这是在TableViewController中使用UISearchController

1 个答案:

答案 0 :(得分:2)

由于Dictionary或NSDictionary已经提供了键值对类型机制,您可以将相关值包装在这样的字典中:

var dictionary = ["title_key": "title something", "message_key": "message text"]

然后你可以制作一系列词典。

var masterArrayOfDictionaries = [ dictionary , ["title_key": "title something 2", "message_key": "message text 2"]]

您可以在运行时创建字典并附加到数组:

var dictionary3 = ["title_key": "title something 3", "message_key": "message text 3"]
masterArrayOfDictionaries.append(dictionary3)

现在你的谓词应该是这样的:

//You want to search on the 'message_key' so put it in the predicate
let searchPredicate = NSPredicate(format: "message_key CONTAINS[c] %@", searchController.searchBar.text)

现在应用谓词如下:

let arrayFiltered = (masterArrayOfDictionaries as NSArray).filteredArrayUsingPredicate(searchPredicate)

这将为您提供包含字典的过滤数组,其中包含针对其message_key

的搜索文本