2012-03-30 72 views
1

我正在使用MPMediaQuery從庫中獲取所有藝術家。我想它的返回唯一名稱,但問題是我的圖書館中有藝術家,如「Alice In Chains」和「Alice In Chains」。第二個「Alice In Chains」在最後有一些空格,所以它返回兩個。我不想那樣。繼承人的代碼...從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

一種可能的解決方法是測試藝術家名稱的前導和/或尾隨空格。您可以檢查字符串的第一個字符和最後一個字符以獲得NSCharacterSetwhitespaceCharacterSet的會員資格。如果爲true,則使用NSStringstringByTrimmingCharactersInSet方法修剪所有前導和/或尾部空白。然後,您可以將修剪的字符串或原始字符串添加到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]; 
相關問題