在UITableView中基于indexPath获取对象的替代方法

时间:2013-02-09 20:46:11

标签: iphone objective-c xcode uitableview mpmediaitem

我正在关注教程:http://www.devx.com/wireless/Article/43374 所以我可以添加字母排序和平移到我的UITableView歌曲,我已完成编码,但我遵循的这个方法通过过滤数组和检索cellForRowAtIndexPath方法中的值来减慢UITableView。 我无法弄清楚如何删除多余的编码来提高速度。所有MPMediaItem都存储在tableTracks数组中。这是在viewDidLoad中初始化的。而thee 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;
}

1 个答案:

答案 0 :(得分:1)

如果你要显示单独的部分,每个字母对应一个字母,我会在viewDidLoad中创建一个由我的数据组成的字典数组,而不是在这里。字典将歌曲的第一个字母作为键,并将一系列歌曲作为值。这样,所有的过滤和排序都是预先完成的,而不是在填充表时的每一行中完成。