我正在使用MPMediaQuery从图书馆获取所有艺术家。我猜它返回的唯一名字,但问题是我的图书馆里有艺术家,如“Alice In Chains”和“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];
}
}
有什么想法吗?
答案 0 :(得分:0)
一种可能的解决方法是测试前导和/或尾随空格的艺术家名称。您可以检查字符串的第一个和最后一个字符是否为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];