我正在使用MPMediaQuery从库中获取所有艺术家。我想它会返回独特的名字,但问题是我的图书馆里有艺术家,比如"爱丽丝链"one_answers"爱丽丝链》。第二个"爱丽丝链"在结尾有一些空格,所以它同时返回这两个空格。我不想那样。这是代码。。。
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];
}
}
有什么想法吗?
一个可能的解决方法是测试艺术家名称的前导和/或尾随空格。您可以检查字符串的第一个和最后一个字符是否具有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];