У меня проблема со временем загрузки таблицы, как я могу это улучшить?Загрузка таблицы занимает около 25-30 секунд и занимает около 25-30 секунд.У меня есть около 130000 строк в моей базе данных sqlite, и я использую основные данные для доступа к этим данным.
Любая помощь или предложения будут с благодарностью.
Спасибо за ваше время, и если вам нужна дополнительная информация, пожалуйста, дайте мне знать.
Две вещи, которые япытался оптимизировать.
+ Базовые данные - возможно, моя выборка данных может быть улучшена, но я не знаю, что еще я могу сделать, код указанниже.
if (fetchedResultsController != nil)
{
return fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"DataModel" inManagedObjectContext:_context];
[fetchRequest setEntity:entity];
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"subsection" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
//[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"section == [c] %@ AND area == 'Tables'", tablesSection]];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"area == 'Tables'"]];
[fetchRequest setFetchBatchSize:100];
//[fetchRequest setFetchLimit:100];
[fetchRequest setFetchOffset:10];
NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:_context sectionNameKeyPath:@"uppercaseFirstLetterOfNameTables" cacheName:nil];
self.fetchedResultsController = theFetchedResultsController;
fetchedResultsController.delegate = self;
return fetchedResultsController;
+ Представление таблицы , я думаю, что способ загрузки данных, вероятно, является главной проблемой здесь.Я динамически вычисляю высоту для каждой ячейки, и я думаю, что это замедляет процесс. Если я удаляю код для метода heightForRowAtIndexPath , я могу уменьшить время загрузки до 8 секунд.
(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
Model *info;
if(self.searchDisplayController.isActive)
{
info = [searchFetchedResultsController objectAtIndexPath:indexPath];
}
else
{
info = [fetchedResultsController objectAtIndexPath:indexPath];
}
NSString *subsectionHeight = info.subsection;
NSString *textHeight = info.text;
CGSize titleSize = [subsectionHeight sizeWithFont:[UIFont fontWithName:@"Helvetica-Bold" size:20] constrainedToSize:CGSizeMake(300, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap];
CGSize detailSize = [textHeight sizeWithFont:[UIFont fontWithName:@"Helvetica-Bold" size:16] constrainedToSize:CGSizeMake(300, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap];
return detailSize.height+titleSize.height;
//return 88;
}
(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.textLabel.numberOfLines = 0;
cell.detailTextLabel.numberOfLines = 0;
}
//if-statement need to prevent search index issue
if(self.searchDisplayController.isActive && [self.searchDisplayController.searchBar.text isEqualToString:@""])
{
return cell;
}
// Configure the cell...
[self configureCell:cell atIndexPath:indexPath];
return cell;
}
(void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
Model *info;
if (self.searchDisplayController.isActive)
{
info = [searchFetchedResultsController objectAtIndexPath:indexPath];
}
else
{
info = [fetchedResultsController objectAtIndexPath:indexPath];
}
cell.textLabel.text = info.subsection;
cell.detailTextLabel.text = info.text;
}
ОБНОВЛЕНИЕ : я использую решение с закомментированной heightForRowAtIndexPath, но мне нужна помощь с оптимизацией поиска, может кто-нибудь помочь мне понять, как реализовать решение в сеансе WWDC 2010?Не понимаю, как создать новую часть сущности, например, нужно ли мне заполнять эту новую сущность данными?