2011-11-23 25 views
6

Tôi đang tạo một ứng dụng mà trong đó người dùng có thể chọn một bài hát trong tab cài đặt và được phát ở chế độ xem khác theo yêu cầu. Tôi muốn nó để mục này có thể được lưu trữ nếu người dùng tắt ứng dụng và mở lại lần nữa.Cách để duy trì các đối tượng MPMediaItemCollection? (được chọn từ iPod)

tôi đã quản lý để cho phép người dùng lựa chọn và lưu trữ một bài hát bằng:

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

nhưng tôi muốn người dùng phải làm điều này mỗi khi họ sử dụng ứng dụng.

Tôi đã cố gắng sử dụng NSUserDefaults:

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

nhưng nhận được lỗi:

* - [NSUserDefaults setObject: forKey:]: Cố gắng để chèn giá trị phi tài sản '' của lớp ' MPMediaItemCollection '. Lưu ý rằng từ điển và mảng trong danh sách thuộc tính cũng phải chỉ chứa giá trị thuộc tính.

Tùy chọn của tôi là gì? Không thực sự chắc chắn làm thế nào để giải quyết vấn đề này ...

SOLUTION -

tôi không thể trả lời câu hỏi của riêng tôi nhưng vì vậy tôi sẽ đưa nó lên đây:

TÔI ĐÃ TÌM THẤY SOLUTION của riêng tôi để nÀY:

convert Đầu tiên/mã hóa MPMediaItemCollection đến một đối tượng và slam cửa hàng NSData nó bằng cách sử NSUserDefaults sử dụng:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:mediaItemCollection]; 

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

Từ đó, bạn có thể giải mã một nd sử dụng ở bất kỳ nơi nào khác trong ứng dụng của bạn ....

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

Hy vọng đó là một số trợ giúp cho ai đó. Lây lan từ, điều này đã không được bảo hiểm đủ. Có nghĩa đen đã làm việc về vấn đề này trong khoảng 4 giờ ...

Trả lời

4

Bạn chỉ có thể lưu trữ giá trị danh sách thuộc tính trong NSUserDefaults. Vì MPMediaItemCollection tuân theo NSCoding, bạn có thể sử dụng NSKeyedArchiver để lưu trữ nó thay thế.

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

Sau đó bạn sử dụng NSKeyedUnarchiver để đọc nó lại ra của tập tin sau.

+0

Ah cảm ơn, đã hiểu. –

2

Bạn cũng có thể sử dụng thuộc tính MPMediaItemPropertyPersistentID. Bạn có thể tạo một truy vấn để lấy mục từ thư viện iPod khi ứng dụng của bạn tiếp theo khởi chạy và xử lý một cách duyên dáng những thứ như khi người dùng quyết định xóa bài hát khỏi thư viện của họ.

Các vấn đề liên quan