2011-11-23 18 views
6

Kullanıcının bir ayar sekmesinde bir şarkı seçebileceği ve bunu isteğe bağlı olarak farklı bir görünümde oynatabildiği bir uygulama yapıyorum. Bunun için kullanıcının uygulamayı kapatıp başka bir zamanı tekrar açması durumunda bu öğenin saklanabilmesini istiyorum.MPMediaItemCollection nesnelerini sürdürmenin yolu nedir? (iPod'dan seçilen)

Ben kullanıcı ile bir şarkı seçin ve saklamasına izin başarmış:

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

ama kullanıcı uygulamayı kullanabilir bu her zaman yapmak zorunda istiyorum.

denedim kullanarak NSUserDefaults:

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

ama hata alıyorum:

* - [NSUserDefaults setObject: forKey:]: 'sınıfının'' olmayan özellik değeri eklemek girişimi MPMediaItemCollection'. Emlak listelerindeki sözlüklerin ve dizilerin yalnızca özellik değerleri içermesi gerektiğini unutmayın.

Seçeneklerim nelerdir? Bu bir mücadele nasıl gerçekten emin değilim ...

ÇÖZÜM -

Henüz kendi sorulara cevap veremez yüzden buraya koymak gerekir: Ben İÇİN KENDİ çözüm bulduk

bU:

İlk dönüştürmek/o kullanan NSUserDefaults kullanarak bir NSData nesne ve slam deposuna MPMediaItemCollection kodlamak: Oradan

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:mediaItemCollection]; 

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

, sen deşifre edebilir bir your Uygulamanızın herhangi bir yerinde başka bir yerde kullanın.

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

Bu birilerine yardımcı olur umarım. Kelimeyi yayınla, bu yeterince kaplanmamıştı. Tam olarak yaklaşık 4 saat boyunca bu sorun üzerinde çalıştım ...

cevap

4

Sadece özellik listesi değerlerini NSUserDefaults'da saklayabilirsiniz. MPMediaItemCollection, NSCoding'e uygun olduğundan, onu depolamak için bir NSKeyedArchiver kullanabilirsiniz.

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

Sonra sonra geri dosyanın dışarı okumak için NSKeyedUnarchiver kullanın.

+0

Ah teşekkürler, anladım. –

2

MPMediaItemPropertyPersistentID özelliğini de kullanabilirsiniz. Uygulamanızın bir sonraki açılışında öğeyi iPod kütüphanesinden almak için bir sorgu oluşturabilir ve kullanıcı şarkıyı kendi kitaplığından kaldırmaya karar verdiğinde olduğu gibi incelikli bir şekilde işlem yapabilirsiniz.

İlgili konular