Как сохранить объекты 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

, но я хочу, чтобы пользователь делал это каждый раз, когда использует приложение.

Я попытался использовать 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 часов ...

6
задан Adam Waite 23 November 2011 в 23:28
поделиться