坚持MPMediaItemCollection对象的方法? (从iPod中select)

我正在制作一个应用程序,用户可以在设置选项卡中select一首歌曲,并根据需要在不同的视图中播放。 我想要它,以便这个项目可以存储,如果用户要closures应用程序,并再次打开它。

我已经设法允许用户select并存储歌曲:

-(IBAction)showMediaPicker:(id)sender{ MPMediaPickerController *mediaPicker = [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeAny]; mediaPicker.delegate = self; mediaPicker.allowsPickingMultipleItems = NO; mediaPicker.prompt = @"Select Alarm Sound"; [self presentModalViewController:mediaPicker animated:YES]; } - (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection { [self dismissModalViewControllerAnimated: YES]; settingsData.selectedSong = mediaItemCollection;//Object of type MPMediaItemCollection 

但我希望用户每次使用应用程序时都必须这样做。

我曾尝试使用NSUserDefaults:

 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:settingsData.selectedSong forKey:@"alarmSoundKey"]; [defaults synchronize]; 

但得到的错误:

* – [NSUserDefaults setObject:forKey:]:尝试插入类“MPMediaItemCollection”的非属性值“”。 请注意,属性列表中的字典和数组也必须仅包含属性值。

我有什么select吗? 不确定如何解决这个问题

scheme –

我不能回答我自己的问题,所以我会把它放在这里:

我已经find了自己的解决scheme:

首先将MPMediaItemCollection转换/编码为一个NSData对象,并使用NSUserDefaults使用以下命令将其存储:

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

从那里,你可以解码和使用你的应用程序的任何其他地方….

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

希望对某人有所帮助。 传播这个词,这还没有被覆盖。 已经从字面上解决这个问题约4小时…

您只能将属性列表值存储在NSUserDefaults中。 由于MPMediaItemCollection符合NSCoding,你可以使用NSKeyedArchiver来存储它。

http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSKeyedArchiver_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40003672

然后使用NSKeyedUnarchiver将其从文件中读出。

您也可以使用MPMediaItemPropertyPersistentID属性。 您可以形成一个查询,以便在下一次启动应用程序时从iPod库中检索项目,并优雅地处理事件,例如用户决定从库中删除歌曲。