从MPMediaQuery获取独特的艺术家姓名

时间:2012-03-30 05:25:25

标签: iphone unique names mpmediaitem mpmediaquery

我正在使用MPMediaQuery从图书馆获取所有艺术家。我猜它返回的唯一名字,但问题是我的图书馆里有艺术家,如“Alice In Chains”和“Alice In Chains”。第二个“Alice In Chains”在最后有一些空格,所以它返回两者。我不想那样。继承人代码......

MPMediaQuery *query=[MPMediaQuery artistsQuery];
    NSArray *artists=[query collections];
    artistNames=[[NSMutableArray alloc]init];
     for(MPMediaItemCollection *collection in artists)
    {
        MPMediaItem *item=[collection representativeItem];
        [artistNames addObject:[item valueForProperty:MPMediaItemPropertyArtist]];
    }
    uniqueNames=[[NSMutableArray alloc]init];
    for(id object in artistNames)
    {
        if(![uniqueNames containsObject:object])
        {
            [uniqueNames addObject:object];
        }
    }

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

一种可能的解决方法是测试前导和/或尾随空格的艺术家名称。您可以检查字符串的第一个和最后一个字符是否为NSCharacterSet whitespaceCharacterSet的成员资格。如果为true,则使用NSString stringByTrimmingCharactersInSet方法修剪所有前导和/或尾随空格。然后,您可以将修剪后的字符串或原始字符串添加到NSMutableOrderedSet。有序集只接受不同的对象,因此不会添加重复的艺术家名称:

MPMediaQuery *query=[MPMediaQuery artistsQuery];
NSArray *artists=[query collections];
NSMutableOrderedSet *orderedArtistSet = [NSMutableOrderedSet orderedSet];

for(MPMediaItemCollection *collection in artists)
{
    NSString *artistTitle = [[collection representativeItem] valueForProperty:MPMediaItemPropertyArtist];
    unichar firstCharacter = [artistTitle characterAtIndex:0];
    unichar lastCharacter = [artistTitle characterAtIndex:[artistTitle length] - 1];

    if ([[NSCharacterSet whitespaceCharacterSet] characterIsMember:firstCharacter] ||
        [[NSCharacterSet whitespaceCharacterSet] characterIsMember:lastCharacter]) {
        NSLog(@"\"%@\" has whitespace!", artistTitle);
        NSString *trimmedArtistTitle = [artistTitle stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
        [orderedArtistSet addObject:trimmedArtistTitle];
    } else { // No whitespace
        [orderedArtistSet addObject:artistTitle];
    }
}

如果需要,您还可以从有序集中返回一个数组:

NSArray *arrayFromOrderedSet = [orderedArtistSet array];