UISearchController 搜索两个数组
UISearchController searching two arrays
如何使用 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]
并且应该根据搜索标题 1 过滤数组
arrayOneFiltered = ["title1"]
arrayTwo = ["message1"]
有人可以帮我处理谓词字符串和过滤吗?
同样,这是在 TableViewController 中使用 UISearchController
由于 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
搜索到的文本的字典
如何使用 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]
并且应该根据搜索标题 1 过滤数组
arrayOneFiltered = ["title1"]
arrayTwo = ["message1"]
有人可以帮我处理谓词字符串和过滤吗?
同样,这是在 TableViewController 中使用 UISearchController
由于 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