【发布时间】:2016-06-05 13:02:31
【问题描述】:
我有一个UISearchBar,数组中有超过 80000 个元素,我必须根据用户输入过滤这个数组。
但是在搜索视图中输入时,它的工作速度非常慢,这意味着在键盘上输入值需要花费太多时间。
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.characters.count == 0 {
searchActive = false
} else {
searchActive = true;
filtered.removeAllObjects()
dispatch_to_background_queue {
for sumber in self.data {
let nameRange: NSRange = sumber.rangeOfString(searchText, options: [NSStringCompareOptions.AnchoredSearch,NSStringCompareOptions.CaseInsensitiveSearch])
if nameRange.location != NSNotFound {
self.filtered.addObject(sumber)
}
}//end of for
self.dispatch_to_main_queue {
/* some code to be executed on the main queue */
self.tableView.reloadData()
}
} //end of dispatch
}
}
func dispatch_to_main_queue(block: dispatch_block_t?) {
dispatch_async(dispatch_get_main_queue(), block!)
}
func dispatch_to_background_queue(block: dispatch_block_t?) {
let q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispatch_async(q, block!)
}
【问题讨论】:
-
如何过滤数据?
-
for sumber in self.data { let nameRange: NSRange = sumber.rangeOfString(searchText, options: [NSStringCompareOptions.AnchoredSearch,NSStringCompareOptions.CaseInsensitiveSearch]) if nameRange.location != NSNotFound { self.filtered. addObject(sumber) }
-
用你的代码编辑你的问题,不要放在评论里,它很难阅读。
-
我已将搜索过滤器放在 dispatch_async 中,但它仍然运行缓慢
-
我已经用我的搜索过滤器代码更新了我的问题
标签: ios arrays swift filter uisearchbar