在整理MPMediaQuery时,转义标点符号和歌曲标题中的“The”前缀

时间:2012-03-17 14:30:33

标签: ios uitableview mpmediaquery

代码使用部分工作并填充表格,但它有一个缺陷:它不会逃避标点符号和歌曲标题中的''前缀,就像本机音乐应用程序一样。

非常感谢我应该如何做到这一点。

- (void)viewDidLoad
{
    [super viewDidLoad];
    MPMediaQuery *songQuery = [MPMediaQuery songsQuery];
    self.songsArray = [songQuery items];
    self.sectionedSongsArray = [self partitionObjects:self.songsArray collationStringSelector:@selector(title)];
}

- (NSArray *)partitionObjects:(NSArray *)array collationStringSelector:(SEL)selector
{
    UILocalizedIndexedCollation *collation = [UILocalizedIndexedCollation currentCollation];
    NSInteger sectionCount = [[collation sectionTitles] count];
    NSMutableArray *unsortedSections = [NSMutableArray arrayWithCapacity:sectionCount];
    for(int i = 0; i < sectionCount; i++)
    {
        [unsortedSections addObject:[NSMutableArray array]];
    }
    for (id object in array)
    {
        NSInteger index = [collation sectionForObject:object collationStringSelector:selector];
        [[unsortedSections objectAtIndex:index] addObject:object];
    }
    NSMutableArray *sections = [NSMutableArray arrayWithCapacity:sectionCount];
    for (NSMutableArray *section in unsortedSections)
    {
        [sections addObject:[collation sortedArrayFromArray:section collationStringSelector:selector]];
    }
    return sections;
}

2 个答案:

答案 0 :(得分:5)

我完全忽视了这一点。这里的答案是简单地使用MPMediaQuerySection。 Apple文档是有原因的!

答案 1 :(得分:2)

Cocotutch -

以下是我用来索引包含音乐库中所有歌曲的查询的实现:

MPMediaQuery *allSongsQuery = [MPMediaQuery songsQuery];

// Fill in the all songs array with all the songs in the user's media library
allSongsArray = [allSongsQuery items];

allSongsArraySections = [allSongsQuery itemSections];

allSongsArraySections是MPMediaQuerySection的NSArray,每个都有标题和范围。第0部分的NSArray对象(在我的例子中带有标题@“A”)的range.location为0,range.length为158.

当为我的UITableView调用numberOfRowsInSection时,我返回每个部分的range.length值。我使用cellForRowAtIndexPath中的range.location值作为该节的起始行,然后将indexPath.row添加到它,以便到达我需要从allSongsArray返回的单元格。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
....
    // Return the number of rows in the section.
    MPMediaQuerySection *allSongsArraySection = globalMusicPlayerPtr.allSongsArraySections[section];
    return allSongsArraySection.range.length;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
...
    MPMediaQuerySection *allSongsArraySection = globalMusicPlayerPtr.allSongsArraySections[indexPath.section];
    rowItem = [globalMusicPlayerPtr.allSongsArray objectAtIndex:allSongsArraySection.range.location + indexPath.row];
....
}

在使用之前,我试图通过编写自己的实现来匹配本机音乐播放器的实现,并且它的行为并不完全相同。不仅如此,原生索引还要快得多!