2012-03-30 9 views
1

私はMPMediaQueryを使用してライブラリからすべてのアーティストを取得しています。その帰りのユニークな名前は私が推測しますが、問題は私のライブラリに "Alice In Chains"や "Alice In Chains"のようなアーティストがいることです。 2番目の「Alice In Chains」には最後に空白があるため、両方を返します。私はそれを望んでいない。コードをHeres ...MPMediaQueryから一意のアーティスト名を取得

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

アイデア?

答えて

0

考えられる回避策の1つは、先頭と末尾の空白のアーティスト名をテストすることです。あなたはNSCharacterSetwhitespaceCharacterSetとメンバーシップのための文字列の最初と最後の文字を調べることができます。 trueの場合は、NSStringstringByTrimmingCharactersInSetメソッドを使用して、先頭および/または末尾の空白をすべて削除します。その後、トリムされた文字列または元の文字列をNSMutableOrderedSetに追加することができます。

NSArray *arrayFromOrderedSet = [orderedArtistSet array]; 
:また、あなたはそれが必要な場合は注文したセットから配列を返すことができ

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

:順序集合はだけなので重複アーティスト名が追加されません異なるオブジェクトを受け入れます

関連する問題