在远程服务器数据库上执行搜索必须有比现在更好的方法。
我在表视图顶部安装了UISearchController
,只显示了30行 - 当用户向下滚动到底部时,另外30行被加载等等......
所以我用来执行搜索的方法如下所示:
func searchForWriter(searchString: String!) {
UIApplication.sharedApplication().networkActivityIndicatorVisible = true
Client.sharedInstance.searchForWriterByName(searchString) {(searchResults: [Writer]?, error: NSError?) -> Void in
if let error = error {
NSLog("Error: %@", error.description)
dispatch_async(dispatch_get_main_queue()) {
UIApplication.sharedApplication().networkActivityIndicatorVisible = false
}
} else {
dispatch_async(dispatch_get_main_queue()) {
self.filteredWriters = searchResults!
// TODO: - This needs debugging to get the last searched string?
print("searched for: \(searchString)")
self.writersTableView.reloadData()
UIApplication.sharedApplication().networkActivityIndicatorVisible = false
}
}
}
}
UISearchResultsUpdating
响应searchBar
中的任何更改,从而调用上述searchForWriter
方法。
问题是当从服务器获取搜索结果时,无法保证最后搜索到的字符串是什么?
事实上,在几乎大多数情况下,这种方法需要更长的时间才能获得较小的搜索字符串而不是较长的搜索字符串...因此会给出完全令人沮丧的搜索结果
答案 0 :(得分:1)
事实上你在这里问了几个问题:
1)您正在寻找的有关显示行数的内容称为分页。查找策略如何执行,但无论如何,您的服务器必须支持它。
2)关于每个输入字符的搜索:你应该只在输入至少n个字符时才开始搜索(n为3左右),只有一个字符的搜索结果可能无用。
3)添加一些计时器约束,以便只有当用户在600毫秒左右没有输入任何内容时才会启动搜索 - 这可以避免大量调用服务器以获得不必要的中间结果。