メディア ピッカーで作成した曲のプレイリストを保存しようとしています。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 を保存することは可能ですか? もしそうなら、どのように?