Получить уникальные имена исполнителей из MPMediaQuery - PullRequest
1 голос
/ 30 марта 2012

Я использую MPMediaQuery, чтобы получить всех художников из библиотеки. Я думаю, он возвращает уникальные имена, но проблема в том, что в моей библиотеке есть художники, такие как «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 голосов
/ 01 июля 2012

Одним из возможных путей решения этой проблемы является проверка имен исполнителей на наличие начальных и / или конечных пробелов.Вы можете проверить первый и последний символ строки на членство с помощью 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];
...