0

メディア ピッカーで作成した曲のプレイリストを保存しようとしています。Persist a MPMediaItemCollection Object Using NSUserDefaultsで提供されている提案を使用しようとしました。このソリューションでは、NSKeyedArchiver を次のように使用します。

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:mediaItemCollection];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:data forKey:@"someKey"];
[defaults synchronize];

MPMediaItemCollection を取得する必要がある場合は、次の処理が実行されます。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:@"someKey"];
MPMediaItemCollection *mediaItemCollection = [NSKeyedUnarchiver unarchiveObjectWithData:data];

これは最初は機能しているように見えましたが、時間の経過とともに一貫して機能しないことがわかりました. 新しいソフトウェア リリース後にアプリをロードした後、プレイリストの一部のメディア アイテムが破損しているようです。たとえば、次のように、取得した MPMediaItemCollection から曲のタイトルを読み込んで tableView に表示しようとすると、次のようになります。

MPMediaItem *anItem = (MPMediaItem *)[mediaItemCollection.items objectAtIndex: row];

if (anItem) {
    cell.textLabel.text = [anItem valueForProperty:MPMediaItemPropertyTitle];

    if (cell.textLabel.text == nil) {
        NSString * persistentID = [anItem valueForProperty:MPMediaItemPropertyPersistentID];
        ...
}

一部のエントリでは、曲のタイトルはありません。キュー内のこのインデックスで曲のpersistentIDを取得しようとすると、persistentIDがありますが、有効な曲を指していません(おそらく単なるゴミです)。

質問は次のとおりです: すべての起動とソフトウェアのアップグレード (私のアップグレードと iOS のアップグレードの両方) で有効であることを確認できる MPMediaItemCollection を保存することは可能ですか? もしそうなら、どのように?

4

1 に答える 1

0

答えはこうじゃない!MPMediaItemCollection オブジェクトは、NSArray、NSDictionary、または NSUserDefaults にアーカイブできるその他のオブジェクトに変換できません。

私の提案は、コレクションを列挙し、 の配列を保存すること[anItem valueForProperty:MPMediaItemPropertyPersistentID]です。に保存しますNSUserDefaults

その後、アプリケーションの次の実行時に、NSArray を読み取って列挙し、persistentID を持つ項目で MPMediaItemCollection を作成します。

役立つことを願っています

于 2014-02-08T00:17:03.620 に答える