gpt4 book ai didi

iphone - UISearchDisplayController 和大量数据的搜索性能

转载 作者:行者123 更新时间:2023-12-03 21:11:55 29 4
gpt4 key购买 nike

我正在尝试找出使用 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com