2009-11-17 3 views
6

내 응용 프로그램에 MPMediaPickerController을 표시하도록했습니다. MediaItem을 저장하고 시작시 다시 재생하고 싶습니다. 나는 이것이 MPMediaQuery을 사용하여 가능하다고 생각한다. 그것은, 내가 MPMediaItemPropertyPersistentID 사용해야하지만, 나는 그것을 위해 쿼리하는 방법을 잘 모르겠습니다 보인다. 이견있는 사람?iPhone SDK, MPMediaItemCollection을 (를) 저장 하시겠습니까?

답변

11

남자, 당신은 mediaCollection을 저장할 필요 없어요. 미디어 컬렉션 MPMediaItem 개체의 배열입니다. 따라서이 항목의 영구 식별자를 저장하는 것이 좋습니다. 아주 쉬워.

//it's how to know persistentId of the song after you got mediaItemCollection from your mediaPickerViewController 
//then you can sav it in userDefaults. 
- (NSNumber *)getPersistentId :(MPMediaItemCollection *)collection atIndex:(int)index { 
MPMediaItem *mediaItem = [collection.items objectAtIndex:index]; 
NSNumber *anId = [mediaItem valueForProperty:MPMediaItemPropertyPersistentID]; 
return anId; 
} 

//when your application will be launched next time you can get required song: 
- (void)obtainSongWitId:(NSNumber *)persistentId { 
MPMediaQuery *query = [MPMediaQuery songsQuery]; 
MPMediaPropertyPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue:persistentId forProperty:MPMediaItemPropertyPersistentID]; 
[query addFilterPredicate:predicate]; 
NSArray *mediaItems = [query items]; 
//this array will consist of song with given persistentId. add it to collection and play it 
MPMediaItemCollection *col = [[MPMediaItemCollection alloc] initWithItems:mediaItems]; 
///.... 
[col release]; 
} 
+0

당신은 그것을 죽였다! –

+0

이 하나의 MPMediaItem을 MPMediaItemCollection으로 래핑하는 데 필요합니까? – surfrider

6

이 작동합니다 :

MPMediaQuery *query = [MPMediaQuery songsQuery]; 
MPMediaPropertyPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue:myPersistentID forProperty:MPMediaItemPropertyPersistentID]; 

[query addFilterPredicate:predicate]; 
NSArray *songs = [query items];