1

我正在使用 MPMediaQuery 从库中获取所有艺术家。我猜它返回的唯一名称,但问题是我的图书馆中有艺术家,如“爱丽丝链”和“爱丽丝链”。第二个“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];
        }
    }

有任何想法吗?

4

1 回答 1

0

一种可能的解决方法是测试艺术家姓名的前导和/或尾随空格。您可以检查字符串的第一个和最后一个字符是否属于NSCharacterSet whitespaceCharacterSet. 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];
于 2012-07-01T14:38:20.270 回答