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