首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何停止MPMediaPickerController用重复的MPMediaItems填充MPMediaItemCollection?

如何停止MPMediaPickerController用重复的MPMediaItems填充MPMediaItemCollection?
EN

Stack Overflow用户
提问于 2013-04-25 08:48:46
回答 2查看 805关注 0票数 1

我正在使用这个代码来选择曲目

代码语言:javascript
复制
//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;

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

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

我的目标是iOS5。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-25 11:15:06

前段时间我遇到了这个问题,不幸的是,如果没有从头开始重新构建选择器(可以做),就没有办法指定是否允许重复。然而,在选择之后检查和删除重复项是相对容易的。

如下所示,有几个选项,但真正的区别在于您是否希望保留集合的原始顺序。

第一个基本上只是遍历集合中的项,如果第二个数组不包含该对象,它会将其复制出来。第二个方法将集合中的所有对象复制到一个NSSet中,它将去掉所有重复的对象,然后再复制回来。这个解决方案根本不能保持秩序。

代码语言:javascript
复制
- (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电缆,但它应该足以让您继续工作。

票数 2
EN

Stack Overflow用户

发布于 2018-10-24 20:19:58

代码语言:javascript
复制
        In swift 

        for i in 0 ..< mediaItemCollection.items.count {
                    let representativeItem: MPMediaItem = mediaItemCollection.items[i]
                    let title = representativeItem.title
                    let artist = representativeItem.artist
                    let imageSound: MPMediaItemArtwork = (representativeItem.value( forProperty: MPMediaItemPropertyArtwork ) as? MPMediaItemArtwork)!
                    let itemUrl = representativeItem.value(forProperty: MPMediaItemPropertyAssetURL) as? NSURL

                    SongDict = NSMutableDictionary()
                    self.setSongData(title, artist: artist, img: imageSound.image(at: CGSize(width: 55, height: 55))!, url:itemUrl!)
                    songArray .insert(SongDict, at: i)
                }

      func setSongData(_ title: String?, artist: String?, img :UIImage , url: NSURL?) {
            SongDict["title"] = title
            SongDict["artist"] = artist
            SongDict["image"] = img
            SongDict["url"] = url
        }

Now you can delete below code 

 let indexPath = IndexPath(row: sender.tag, section: 0)
  self.tbl_Song.beginUpdates()
  self.songArray.removeObject(at: indexPath.row)
  self.tbl_Song.deleteRows(at: [indexPath], with: .left)
  self.tbl_Song.endUpdates()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16204654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档