在我的应用程序中,我正在使用一个可搜索的集合视图,让用户找到存储在coredata中的人员记录。我有搜索设置在输入每个字符时运行。最初,这很有效,但是现在我拥有大量数据,用户界面仍然滞后。我想我需要使用另一个线程来做到这一点,但我在多线程中是一个彻头彻尾的菜鸟。
这是我的代码:
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
self.fetchedResultsController = nil;
NSError *error = nil;
if (![[self fetchedResultsController]performFetch:&error]) {
abort();
}
[self.collectionView reloadData];
[self.searchBar becomeFirstResponder];
}
有没有办法加快速度呢?
编辑:我应该注意到搜索字符串正在提取他的谓词...
答案 0 :(得分:1)
获取所有结果一次并将其保存在数组中。然后从该数组中搜索,而不是每次调用该方法时从核心数据中获取。
答案 1 :(得分:1)
我已经使用THIS方法从数据库中获取UITABLEVIEW,它就像魅力一样。 你是如何实现的:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
你能告诉我们身高的代码,
一些代码示例:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
self.feed.counter = 50;
totalcustomers = [cust getTotalCustomer:@"textSearch" searchText:searchtextString custType:YES employeeId:@"" custId:[module getCurrentOrderCustomerId]];
self.currentSearchTitle = searchText;
[cust setDatabasePath:DELEGATE.databasePath];
self.feed.largeArray = (NSMutableArray *) [cust getSeachedCustomer:searchtextString custId:[module getCustomerId:[NSNumber numberWithInt:0]] action:@"textSearch"];
self.availableCustomers = self.feed.largeArray;
[self.allCustomerTable reloadData];
NSLog(@"%d ",totalcustomers);
}
并在UITableviewScroll上加载下50条记录:
- (void)tableViewOverridedForScrollWithSearch:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSArray * newPosts;
newPosts = [self.feed newRowsFrom:indexPath.row andAction:@"textSearch" andSearchString:self.currentSearchTitle];
NSUInteger newCount = [newPosts count];
if (newCount) {
[self.availableCustomers addObjectsFromArray:newPosts];
[self.allCustomerTable performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
return;
}
}
}
并获得下一个50
- (NSArray *)newRowsFrom:(NSUInteger)newItem andAction:(NSString *)action andSearchString:(NSString *)searchString{
NSLog(@"Counter 1 Print >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> %d", self.counter);
NSArray *result = [self newRowsFromDatabase:self.counter andAction:action andSearchString:searchString];
self.counter = self.counter + 50;
NSLog(@"Counter 2 Print >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> %d", self.counter);
return result;
}
希望它会对你有所帮助 感谢