2009-11-17 21 views
6

私のアプリケーションにMPMediaPickerControllerが表示されています。 MediaItemを保存して、起動時に再び再生を開始したいと思います。私はこれがMPMediaQueryを使って実行可能だと思います。それは、私はMPMediaItemPropertyPersistentIDを使用する必要がありますが、私はそれをどのようにクエリするか分からない。何かご意見は?iPhone SDK、MPMediaItemCollectionを保存しますか?

答えて

11

男、あなたはmediaCollectionを保存する必要がいけません。メディアコレクションMPMediaItemオブジェクトの配列です。だから、このアイテムの永続的なIDを保存する方がよいでしょう。それは非常に簡単です

//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]; 
関連する問題