- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试找出使用 UISearchDisplayController
执行快速搜索的最佳方法。
我有一个包含超过 36000 个条目的 plist 文件。我将此文件加载到字典中,然后在该字典中执行搜索。它可以工作,但有点慢,并且每个触摸事件之间存在延迟。我想要自动完成效果,因此我需要为每个触摸事件触发搜索。
我尝试使用线程通过以下代码在后台执行搜索:
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
[NSThread detachNewThreadSelector:@selector(filter:) toTarget:self withObject:searchString];
return NO;
}
// Filter function looks like this
-(void) filter:(NSString *)search {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[self.filteredList removeAllObjects]; // empty array of results
for (NSString *s in self.keys ) {
NSComparisonResult result = [s compare:search options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [search length])];
if (result == NSOrderedSame) {
[self. filteredList addObject:s ];
}
}
[ self.searchDisplayController.searchResultsTableView reloadData];
[pool release];
}
但是我的应用程序随机崩溃并显示以下消息:
Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFArray objectAtIndex:]: index (1) beyond bounds (0).
我确信这是因为我没有正确使用线程。
我还尝试使用 [self PerformSelector:@selector(filter:) withObject:searchString afterDelay:0.5];
但我也面临应用程序崩溃的问题。
处理这个问题的最佳方法是什么?我不太擅长线程,但我认为这是最好的方法,不是吗?我还尝试了使用 SQLite 的解决方案,但应用程序的响应速度仍然不那么快。
我的数据实际上是邮政编码和城市(36000 个唯一的不同城市,但 6500 个唯一的邮政编码,因为多个城市可以具有相同的邮政编码)。我希望我的搜索项目是邮政编码或城市名称。我知道一本大字典绝对不是最好的结构。如何组织数据以提高效率?
谢谢你帮我解决这个问题。
最佳答案
问题是您的搜索字符串比数组中的原始字符串之一长。当从 0 到 [搜索长度] 进行比较时,您将落在 s 之外。您应该首先确保 s 比 search 长:
for (NSString *s in self.keys ) {
if ([s length]>=[search length]) {
NSComparisonResult result = [s compare:search options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [search length])];
if (result == NSOrderedSame) {
[self. filteredList addObject:s ];
}
}
}
关于iphone - UISearchDisplayController 和大量数据的搜索性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2622912/
当我在 ViewController 中提供 IBOutlet 对象时,我无法在 InterfaceBuilder 中找到它们来链接到 View 中的对象。 一段时间后它会自动出现...(我已正确设置
我有一个在 Interface Builder 中正确连接的 UISearchDisplayController。 delegate = Files Owner searchBar = Search
我正在尝试找出使用 UISearchDisplayController 执行快速搜索的最佳方法。 我有一个包含超过 36000 个条目的 plist 文件。我将此文件加载到字典中,然后在该字典中执行搜
过去我一直以编程方式完成所有工作,但现在我正在尝试学习使用 Interface Builder。本身就是一种体验。 我的问题出在UISearchDisplayController上。只需将其放在我的
我有一个应用程序,它异步搜索远程 API 并使用 iOS 的 UISearchDisplayController 显示 UI。 对于已保存的搜索功能,我一直在尝试以编程方式使用 UISearchDis
我的 uisearchdisplaycontroller 遇到问题。如果我将 Controller 的搜索栏添加到 TableView 标题 View 中,它会在搜索栏上方显示一条细白线!如果我添加搜
alt text http://img210.imageshack.us/img210/5992/searchdisplaycontroller.png 以下对象可以自定义吗? 1。 UISearch
我正在尝试设置一个搜索显示 Controller 来处理来自网络服务的异步结果。我已经掌握了基本的部分,但遇到了一个非常奇怪的问题,我无法弄清楚。 似乎要为异步设置搜索显示 Controller ,您
UISearchDisplayController 非常方便,实现搜索也非常简单。 但是,当在我的应用程序中我想显示带有空搜索字符串但选定范围按钮的搜索结果时,我遇到了问题。 似乎必须输入一些搜索字符
当用户单击“搜索”按钮时,我想关闭 UISearchDisplayController,因为我正在从网络加载新数据。如何以编程方式关闭 Controller ?我已经调用了正确的方法,但不知道该怎么做
我已将 Interface Builder 中的 UITableView 行高设置为 54.0。我在该 View 上有一个 UISearchDisplayController 。当用户点击其中的搜索栏
我正在处理带有搜索栏的 View 。当搜索激活时,导航栏应该动画化(即像 -[navigationController setNavigationBarHidden:animated:]。 我已经使用
我一直在阅读有关 UISearchDisplayController 及其 delegate 的所有文档,但我找不到任何方法可以在搜索条件更改时为表格 View 设置动画。 我正在使用这两种方法: 它
谁能简单地解释一下 UISearchDisplayController 的必要性? ?我实际实现了UISearchBar在我的类里面独自一人,并使用表格 View 来显示结果。它工作正常。 我做了一个
我使用UISearchDisplayController并搜索一种禁用自动搜索的方法。 有办法吗? 最佳答案 这是您的answer,它对它的工作方式有很好的解释。我曾想过为您提供答案,但我想让您了解更
我遇到了试图在我的 UISearchDisplayController 中显示搜索结果的问题。和 TableView Controller 。 我有用于获取搜索结果的 REST API 服务器端点,当
当您没有在 UISearchDisplayController 的 UISearchBar 中输入任何文本时,它会在之前的表格上显示一个半透明的覆盖层。我想加载在这种情况下搜索时出现的表格,以显示最近
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 问题必须表现出对正在解决的问题的最低限度的理解。告诉我们您尝试过的方法、为什么不起作用以及它应该 起作用
我想在用户开始搜索之前用数据源中的所有数据加载搜索显示 Controller 的 TableView 。 我用过 [self.searchDisplayController.searchResults
我有一个 TableView ,与 UISearchDisplayController 结合使用,后者将 UISearchBar 合并到 TableView 的标题中。当用户点击键盘上的“搜索”时,我
我是一名优秀的程序员,十分优秀!