如何使用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
答案 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