16

これを Apple に投稿したのは運が悪かったのですが、iOS 6 の NDA が有効になったので、ここでもっと多くの人に見てもらえることを願っています。

ユーザーがローカルにダウンロードされた音楽のみを選択できるようにアプリを変更しようとしています。iOS 6 GM の下に次のコードがあります。

 MPMediaPickerController* mpc = [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeAnyAudio];

mpc.allowsPickingMultipleItems = YES;
mpc.modalPresentationStyle = UIModalPresentationCurrentContext;
mpc.showsCloudItems = NO;

[self presentViewController:mpc animated:YES completion:nil];

ドキュメントから:

メディア アイテム ピッカーのデフォルトの動作は YES です。これは、ピッカーが利用可能な iCloud アイテムを表示することを意味します。メディア アイテムは、iTunes Match 経由で利用可能であり、まだデバイスに保存されていない場合、iCloud アイテムと見なされます。

これは、iTunes Match が有効になっている場合、デバイスにダウンロードされたアイテムのみがピッカーに表示されることを意味しますが、常に iTunes Match ライブラリ全体が表示されます。深刻なバグのように見えるので、レーダーを提出しました。誰かがそうでなければ私に言うことができれば、私はここで何が欠けているのか知りたい.

4

4 に答える 4

11

これはOSの問題のようです。

picker.showsCloudItems = NO;正しく使用すると、リスト全体ではなく、より少ない曲が表示されます...そこにリストされている曲は、ミュージックアプリで手動でダウンロードされた曲か、ストリーミングされてキャッシュされた曲です。

少なくとも私の場合、問題はキャッシュされたものを処理することです。

手動でダウンロードした曲を選択すると、値はMPMediaItemPropertyIsCloudItemですNO。これは正しいです。プロパティを介してアセットの URL にアクセスすることもできMPMediaItemPropertyAssetURLます。

一方、キャッシュされた曲を選択すると が何度も返さYESMPMediaItemPropertyIsCloudItem、その曲は事実nilMPMediaItemPropertyAssetURL役に立たなくなります。

申し訳ありませんが、実際の回答はありませんが、コメントするだけの評判がありません。

私の 2 セントが何らかの形で役立つことを願っていますが、この問題は将来のアップデートで Apple によってのみ解決されるように思えます。

于 2014-04-07T18:24:40.113 に答える
4

didPickMediaItems デリゲートで項目が iCloud からのものかどうかをテストするためのより良いソリューション:

     MPMediaItem *selectedItem = [selectedItems objectAtIndex:0];

     if (![[selectedItem valueForProperty:MPMediaItemPropertyIsCloudItem] boolValue])

実際に再生する必要はありません。MPMediaItem の埋め込みプロパティを使用する方が効率的です。

于 2013-04-24T14:10:46.263 に答える