2011-11-23 2 views
6

사용자가 설정 탭에서 노래를 선택하고 필요에 따라 다른보기로 재생할 수있는 앱을 만들고 있습니다. 사용자가 앱을 종료하고 다른 시간에 다시 열면이 항목을 저장할 수 있기를 바랍니다.MPMediaItemCollection 객체를 유지하는 방법은 무엇입니까? (iPod에서 선택)

나는 사용자가와에서 노래를 선택하고 저장할 수 있도록 관리해야 :

-(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 '입니다. 속성 목록의 사전과 배열에는 속성 값만 포함해야합니다.

내 옵션은 무엇입니까? 이 일을 해결하는 방법을 정말 확실하지 ...

솔루션 -

나는 아직 내 자신의 질문에 대답 할 수없는 그래서 나는 여기를 놓을 게요 : 나는 내 자신의 해결책을 발견

본 :

먼저 변환/그것을 사용 NSUserDefaults를 사용하여있는 NSData 개체와 슬램 저장소에 MPMediaItemCollection를 인코딩 : 거기에서

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은 NSCoding을 따르므로 대신 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 속성을 사용할 수도 있습니다. 다음에 응용 프로그램이 시작될 때 iPod 라이브러리에서 항목을 검색하는 쿼리를 구성하고 사용자가 라이브러리에서 노래를 제거하기로 결정한 경우와 같이 정상적으로 처리 할 수 ​​있습니다.