2011-11-23 10 views
6

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 ...

Respuesta

2

También puede usar la propiedad MPMediaItemPropertyPersistentID. Puede crear una consulta para recuperar el elemento de la biblioteca del iPod cuando se inicie la aplicación y manejar cosas como cuando el usuario decide eliminar la canción de su biblioteca.

Cuestiones relacionadas