我正在制作一个应用程序,用户可以在其中选择设置选项卡中的歌曲,并根据需要在不同的视图中播放该歌曲。我希望这样,如果用户要关闭应用程序并再次重新打开它,则可以存储该项目。
我设法允许用户选择并存储一首歌曲:
-(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 个小时......