相关疑难解决方法(0)

如何持久化MPMediaItemCollection对象?(从iPod中选择)

我正在创建一个应用程序,用户可以在设置选项卡中选择一首歌曲,并根据需要在不同的视图中播放.我想要它,以便如果用户要关闭应用程序并再次打开它,则可以存储此项目.

我设法允许用户选择并存储一首歌曲:

-(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
Run Code Online (Sandbox Code Playgroud)

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

我尝试过使用NSUserDefaults:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:settingsData.selectedSong forKey:@"alarmSoundKey"];
[defaults synchronize];
Run Code Online (Sandbox Code Playgroud)

但得到错误:

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

请问有什么选择?不太确定如何解决这个问题......

解决方案

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

我已经找到了我自己的解决方案:

首先将MPMediaItemCollection转换/编码为NSData对象,然后使用NSUserDefaults将其存储起来:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:mediaItemCollection];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:data forKey:@"someKey"]; …
Run Code Online (Sandbox Code Playgroud)

iphone ipod nsuserdefaults mpmediaitemcollection ios

6
推荐指数
1
解决办法
1938
查看次数