从MPMediaQuery获取唯一的艺术家名称



我正在使用MPMediaQuery从库中获取所有艺术家。我想它会返回独特的名字,但问题是我的图书馆里有艺术家,比如"爱丽丝链"one_answers"爱丽丝链》。第二个"爱丽丝链"在结尾有一些空格,所以它同时返回这两个空格。我不想那样。这是代码。。。

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];
        }
    }

有什么想法吗?

一个可能的解决方法是测试艺术家名称的前导和/或尾随空格。您可以检查字符串的第一个和最后一个字符是否具有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];

相关内容

  • 没有找到相关文章

最新更新