Альтернативный способ получить объект на основе indexPath в UITableView

Я следовал руководству: http://www.devx.com/wireless/Article/43374 поэтому я мог добавить сортировку по алфавиту и панорамирование в свой UITableView песен, и я закончил кодирование, но этот метод, которому я следовал, замедляет UITableView, фильтруя массивы и извлекая значения в методе cellForRowAtIndexPath. Я не могу понять, как я могу удалить лишнее кодирование, чтобы увеличить скорость. Все MPMediaItems хранятся в массиве tableTracks. Который инициализируется в viewDidLoad. И ты musicIndex представляет собой массив алфавитов (первая буква каждой песни). Я расширил MPMediaItem, включив NSString firstLetter, который является первой буквой песни.

Помогите ускорить его?

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

   //--Create Cell--\\    
    .........

   //--Load Info--\\
    NSString *alphabet = [musicIndex objectAtIndex:[indexPath section]];
    NSPredicate *predicate =
    [NSPredicate predicateWithFormat:@"firstLetter beginswith[c] %@", alphabet];
    NSArray *songs = [tableTracks filteredArrayUsingPredicate:predicate];

   //Needed Object    
    MPMediaItem *item = [songs objectAtIndex:indexPath.row];

    //--Rest of Method--\\
    ...........

    return cell;
}

person keji    schedule 09.02.2013    source источник


Ответы (1)


Если вы показываете отдельные разделы, по одному на каждую букву алфавита, я бы создал массив словарей из своих данных в viewDidLoad, а не здесь. Словари будут иметь первую букву песни в качестве ключа и массив песен в качестве значения. Таким образом, вся фильтрация и сортировка выполняются заранее, а не в каждой строке по мере заполнения таблицы.

person rdelmar    schedule 09.02.2013
comment
Спасибо! Сделал именно то, что вы сказали и заметил большую разницу в скорости! - person keji; 10.02.2013