1

このコードを使用してトラックを選択します

//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に、同じアイテムを 2 回押すと 2 回に追加されることに気付きましたMPMediaItemCollection。アプリにトラックをインポートしていると、2 回インポートすることになります。

トラックが 1 回だけ追加されるように指定する方法、またはそれができない場合は、重複したトラックを選択から除外する機能が欲しいです。これが可能である場合、どうすればそれを行うことができますか?

iOS5をターゲットにしています。

4

2 に答える 2

2

しばらく前にこの問題に遭遇しましたが、残念ながら、ピッカーをゼロから作り直さないと (実行可能)、重複を許可するかどうかを指定する方法がありません。ただし、選択後に重複をチェックして削除するのは比較的簡単です。

以下に概説するようにいくつかのオプションがありますが、実際の違いは、コレクションが最初にあった順序を保持するかどうかにかかっています。

1 つ目は、基本的にコレクション内のアイテムをループするだけで、セカンダリ配列にそのオブジェクトが含まれていない場合は、それをコピーします。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 ケーブルが見つからないように見えるため、ここに含まれているコードはテストされていませんが、それで十分なはずです。

于 2013-04-25T03:15:05.780 に答える