1

ライブラリからすべてのアーティストを取得するために MPMediaQuery を使用しています。一意の名前が返されると思いますが、問題は、ライブラリに「Alice In Chains」や「Alice In Chains」などのアーティストがあることです。2 番目の "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

考えられる回避策の 1 つは、先頭および/または末尾の空白についてアーティスト名をテストすることです。メンバーシップの文字列の最初と最後の文字を調べることができます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];
于 2012-07-01T14:38:20.270 に答える