2011-11-23 11 views
6

मैं एक ऐप बना रहा हूं जिसमें उपयोगकर्ता सेटिंग टैब में एक गाना चुन सकता है और इसे मांग पर एक अलग दृश्य में खेला गया है। मुझे यह चाहिए कि यदि उपयोगकर्ता ऐप बंद करना है और इसे फिर से खोलना है तो यह आइटम संग्रहीत किया जा सकता है।MPMediaItemCollection ऑब्जेक्ट्स को बनाए रखने का तरीका? (आइपॉड से चुना गया)

मैं उपयोगकर्ता के साथ में चुन सकते हैं और एक गाना स्टोर करने के लिए अनुमति देने के लिए कामयाब रहे:

-(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 '। ध्यान दें कि संपत्ति सूचियों में शब्दकोश और सरणी में केवल संपत्ति मान होना चाहिए।

कृपया मेरे विकल्प क्या हैं? वास्तव में सुनिश्चित नहीं हैं कि यह एक से निपटने के लिए कैसे ...

समाधान -

मैं अभी तक अपने ही सवाल का जवाब नहीं कर सकते हैं तो मैं इसे यहाँ डाल देता हूँ:

मैं पाया है मेरी खुद समाधान इस:

पहले परिवर्तित/एक NSData वस्तु और स्लैम दुकान में MPMediaItemCollection सांकेतिक शब्दों में बदलना इसे प्रयोग 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 घंटे के लिए इस समस्या पर काम कर रहे हैं ...

उत्तर

4

आप केवल NSUserDefaults में संपत्ति सूची मानों को संग्रहीत कर सकते हैं। चूंकि MPMediaItemCollection एनएससीओडींग के अनुरूप है, इसलिए आप इसके बजाय स्टोर करने के लिए NSKeyedArchiver का उपयोग कर सकते हैं।

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

फिर आप NSKeyedUnarchiver का उपयोग इसे वापस फ़ाइल से बाहर बाद में पढ़ने के लिए।

+0

आह धन्यवाद, समझ गया। –

2

आप MPMediaItemPropertyPersistentID संपत्ति का भी उपयोग कर सकते हैं। जब आप अपना एप्लिकेशन अगली लॉन्च करते हैं तो आइटम को आइपॉड लाइब्रेरी से पुनर्प्राप्त करने के लिए एक क्वेरी बना सकते हैं, और जब उपयोगकर्ता अपनी लाइब्रेरी से गीत को हटाने का निर्णय लेता है तो चीजों को गहन रूप से संभालता है।

संबंधित मुद्दे