2009-11-17 27 views
6

Tôi có đơn đăng ký của tôi hiển thị số MPMediaPickerController. Tôi muốn lưu MediaItem và bắt đầu phát lại khi khởi động. Tôi nghĩ điều này có thể thực hiện được bằng cách sử dụng MPMediaQuery. Có vẻ như, tôi nên sử dụng MPMediaItemPropertyPersistentID nhưng tôi không chắc chắn làm thế nào để truy vấn cho nó. Có suy nghĩ gì không?iPhone sdk, lưu MPMediaItemCollection?

Trả lời

11

Man, bạn không cần phải tiết kiệm mediaCollection. phương tiện truyền thông thu thập nó chỉ là mảng của các đối tượng MPMediaItem. Vì vậy, bạn nên lưu persistentIds của mặt hàng này. nó khá dễ dàng

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

helll yeah bạn đã giết nó !!! –

+0

có cần thiết để bọc một MPMediaItem vào MPMediaItemCollection không? – surfrider

6

này nên làm việc:

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

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