Я создаю приложение, в котором пользователь может выбрать песню на вкладке настроек и воспроизвести ее в другом представлении по требованию. Я хочу, чтобы этот элемент можно было сохранить, если пользователь захочет закрыть приложение и открыть его в другой раз.
Мне удалось разрешить пользователю выбирать и сохранять песню с помощью:
-(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 часов ...