Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
搜索栏挂在iphone上,但在模拟器上运行良好_Iphone_Ios_Uisearchbar - Fatal编程技术网

搜索栏挂在iphone上,但在模拟器上运行良好

搜索栏挂在iphone上,但在模拟器上运行良好,iphone,ios,uisearchbar,Iphone,Ios,Uisearchbar,我的应用程序大约有200行UITableView,当我使用xcode上的模拟器通过UISearchBar过滤数据时,它会立即过滤并显示结果。然而,当我在iphone(iphone4,iOS 5.1.1)上运行我的应用程序时,它会挂起几秒钟,然后再显示任何搜索结果。我正在使用此代码筛选数据 - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{ [self.filteredData remov

我的应用程序大约有200行UITableView,当我使用xcode上的模拟器通过UISearchBar过滤数据时,它会立即过滤并显示结果。然而,当我在iphone(iphone4,iOS 5.1.1)上运行我的应用程序时,它会挂起几秒钟,然后再显示任何搜索结果。我正在使用此代码筛选数据

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
[self.filteredData removeAllObjects];

if ([searchText length] > 0) {
    self.isSearching = YES;
    for (AClass *filteredData in self.allData) {
        NSRange titleResultRange = [filteredData.name rangeOfString:self.searchBar.text options:NSCaseInsensitiveSearch];
        if (titleResultRange.location != NSNotFound) {
            [self.filteredData addObject:filteredData];
        }
    }
}
else self.isSearching = NO;
[self.tableView reloadData];}
我相信我的代码是可以的,因为它在模拟器上运行得非常好,我需要做些什么才能让它在iphone上运行得更快?
顺便说一句,我的iPhone运行得很好,我使用其他应用程序,它们对我来说运行得很好。

你的设备比模拟器花费的时间更长的原因是可用的内存量。一般来说,不要在模拟器中使用应用程序的性能来判断应用程序的性能

如果您按照您描述的方式过滤一个非常大的数据集,我建议您使用调度队列来执行搜索,而不是在主队列中进行搜索。您可以在此处阅读有关它们的信息:

如果您不想阅读整个文档,下面是一个示例,说明您的代码是什么样子的

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
    [self.filteredData removeAllObjects];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        if ([searchText length] > 0) {
            self.isSearching = YES;
            for (AClass *filteredData in self.allData) {
                NSRange titleResultRange = [filteredData.name rangeOfString:self.searchBar.text options:NSCaseInsensitiveSearch];
                if (titleResultRange.location != NSNotFound) {
                    [self.filteredData addObject:filteredData];
                }
            }
        }
        else self.isSearching = NO;
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.tableView reloadData];
        });
    });
}
请注意,我给你的例子不是线程安全的。。。您需要确保在任何给定时间只执行一次搜索,否则此代码将崩溃,因为同一数组将在多个队列中引用。如果你需要更多的帮助,请留下评论,我会尽力去做