1

即时通讯使用此代码来选择曲目如何停止MPMediaPickerController使用重复的MPMediaItems填充MPMediaItemCollection?

//open the media picker, allow the inport of any type of audio 
MPMediaPickerController *mediaPickerController = [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeAnyAudio]; 

mediaPickerController.prompt = @"Choose items to import"; 
//we want to be able to import multiple items at once 
mediaPickerController.allowsPickingMultipleItems = YES; 
mediaPickerController.delegate = self; 

当选择我注意到,压在同一项目两次把它添加到MPMediaItemCollection两次在MPMediaPickerController的项目。当我将曲目导入我的应用程序时,我最终导入了两次。

我想要一种方式来指定该轨道只能被添加一次,否则就无法从选择中滤除重复的轨道。如果这是可能的,我该如何去做呢?

我针对的是iOS5。

回答

2

我遇到了这个问题,但不幸的是,如果不从头开始重新设置选择器(可执行),则无法指定是否允许重复。但是,选择后检查并删除重复项目是相对无痛的。

有几个选项,如下所列,但差异确实可归结为您是否希望保留以便收集原本英寸

第一基本上只是通过项目环该集合,如果辅助数组不包含该对象,则将其复制出来。第二个将来自集合的所有对象复制到NSSet中,它将删除所有重复项,然后复制回来。该解决方案根本不保留订单。

- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection { 
    MPMediaItemCollection *dupeFreeCollection = nil; 

    if (shouldPreserveOrder) { 
     //Will preserve order, with exception of subtracted duplicates 

     NSMutableArray *newCopy = [NSMutableArray new]; 
     for (MPMediaItem *item in mediaItemCollection.items) { 
      if (![newCopy containsObject:(MPMediaItem *)item]) { 
       [newCopy addObject:(MPMediaItem *)item]; 
      } 
     } 
     dupeFreeCollection = [[MPMediaItemCollection alloc] initWithItems:newCopy]; 

    }else{ 
     //Will not preserve order 

     NSSet *set = [[NSSet alloc] initWithArray:mediaItemCollection.items]; 
     dupeFreeCollection = [[MPMediaItemCollection alloc] initWithItems:[set allObjects]]; 
    } 
} 

请记住,我已经包含的代码是未经测试的,因为我似乎无法找到一个iPhone电缆,但它应该足以让你去。

+0

美丽,效果很好。 – 2013-04-25 12:09:23