【发布时间】:2014-03-05 13:33:34
【问题描述】:
我正在尝试保存使用媒体选择器创建的歌曲的播放列表。我尝试使用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。如果有,怎么做?
【问题讨论】:
标签: ios nskeyedarchiver mpmediaitem mpmediaitemcollection nskeyedunarchiver