iPhone SDK,如何保存MPMediaItemCollection?

6

我有一个应用程序显示一个MPMediaPickerController。我想在启动时保存MediaItem并重新开始播放。我认为可以使用MPMediaQuery来实现这一点。看起来,我应该使用MPMediaItemPropertyPersistentID,但我不确定如何查询它。有什么想法吗?

2个回答

11

伙计,你不需要保存mediaCollection。mediaCollection只是一个包含MPMediaItem对象的数组。所以最好保存这些项目的persistentIds。这很容易实现。

//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];
}

将单个MPMediaItem包装成MPMediaItemCollection是必要的吗? - surfrider

6

这应该可以工作:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接