我正在制作一个应用程序,用户可以在其中选择设置选项卡中的歌曲,并根据需要在不同的视图中播放。如果用户要关闭应用程序并再次重新打开它,我想要它以便可以存储此项目。
我设法允许用户选择并存储一首歌曲:
-(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”类的非属性值“”。请注意,属性列表中的字典和数组也必须只包含属性值。
请问我有什么选择?真的不知道如何解决这个问题......
解决方案 -
我还不能回答我自己的问题,所以我把它放在这里:
我找到了自己的解决方案:
首先将 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 个小时......