Estoy creando una aplicación en la que el usuario puede seleccionar una canción en la pestaña de configuración y reproducirla en una vista diferente a pedido. Lo quiero para que este elemento se pueda almacenar si el usuario debe cerrar la aplicación y volver a abrirla en otro momento.¿Cómo persistir los objetos MPMediaItemCollection? (seleccionado de iPod)
He conseguido que el usuario pueda seleccionar y almacenar una canción con:
-(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
pero quiero que el usuario tenga que hacer esto cada vez que utilizan la aplicación.
He intentado usar NSUserDefaults:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:settingsData.selectedSong forKey:@"alarmSoundKey"];
[defaults synchronize];
pero sale el error:
* - [NSUserDefaults setObject: forKey:]: Intento de insertar valor que no sea propiedad '' de la clase ' MPMediaItemCollection '. Tenga en cuenta que los diccionarios y las matrices en las listas de propiedades también deben contener solo valores de propiedad.
¿Cuáles son mis opciones, por favor? No es muy seguro cómo hacer frente a este ...
SOLUCIÓN -
No puedo responder a mis propias preguntas todavía, así que voy a poner aquí:
he encontrado mi propia solución a ESTO:
Primera convertir/codificar los MPMediaItemCollection a un almacén de objetos y el golpe NSData usando NSUserDefaults usando:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:mediaItemCollection];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:data forKey:@"someKey"];
[defaults synchronize];
a partir de ahí, se puede descodificar una nd uso en cualquier otro lugar en su aplicación ....
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:@"someKey"];
MPMediaItemCollection *mediaItemCollection = [NSKeyedUnarchiver unarchiveObjectWithData:data]
Espero que sea de ayuda a alguien. Corre la voz, esto no se ha cubierto lo suficiente. Literalmente han estado trabajando en este problema durante aproximadamente 4 horas ...
Ah gracias, lo tengo. –