2011-11-23 8 views
6

Sto creando un'app in cui l'utente può selezionare un brano in una scheda delle impostazioni e farlo riprodurre su una vista diversa su richiesta. Lo voglio affinché questo elemento possa essere memorizzato se l'utente deve chiudere l'app e riaprirla un'altra volta.Modo per persistere oggetti MPMediaItemCollection? (selezionato da iPod)

Sono riuscito a permettere all'utente di selezionare e memorizzare una canzone 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 

ma voglio che l'utente ha a che fare questo ogni volta che utilizzano l'applicazione.

Ho provato con NSUserDefaults:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setObject:settingsData.selectedSong forKey:@"alarmSoundKey"]; 
[defaults synchronize]; 

ma l'errore:

* - [NSUserDefaults setObject: Forkey:]: Tentativo di inserire il valore non di proprietà '' di classe ' MPMediaItemCollection'. Nota che i dizionari e le matrici negli elenchi di proprietà devono contenere anche solo valori di proprietà.

Quali sono le mie opzioni per favore? Non proprio sicuro di come affrontare questo ...

SOLUZIONE -

non posso ancora rispondere alle mie domande quindi mi metto qui:

ho trovato la mia SOLUZIONE ALLA PROPRIA QUESTO:

prima convertire/codificare il MPMediaItemCollection a un oggetto e sbattere negozio NSData utilizzando NSUserDefaults utilizzando:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:mediaItemCollection]; 

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setObject:data forKey:@"someKey"]; 
[defaults synchronize]; 

da lì, si può decodificare un usa altrove nella tua app ...

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSData *data = [defaults objectForKey:@"someKey"]; 
MPMediaItemCollection *mediaItemCollection = [NSKeyedUnarchiver unarchiveObjectWithData:data] 

Spero che sia di aiuto a qualcuno. Spargi la voce, questo non è stato coperto abbastanza. Abbiamo letteralmente lavorato a questo problema per circa 4 ore ...

risposta

4

È possibile memorizzare solo valori di elenchi di proprietà in NSUserDefaults. Poiché MPMediaItemCollection è conforme a NSCoding, è possibile utilizzare un NSKeyedArchiver per memorizzarlo.

http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSKeyedArchiver_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40003672

È quindi utilizzare NSKeyedUnarchiver a leggere di nuovo fuori del file in seguito.

+0

Ah grazie, capito. –

2

È inoltre possibile utilizzare la proprietà MPMediaItemPropertyPersistentID. Puoi creare una query per recuperare l'elemento dalla libreria di iPod all'avvio successivo della tua applicazione e gestire con garbo cose come quando l'utente decide di rimuovere la canzone dalla sua libreria.

Problemi correlati