ベローは、iOS デバイスの iPod ライブラリ内の項目を取得するためのコードです。私が抱えている問題は、正しいMPMediaItemProperty
. アートワーク、コメントのタイトルなどのデータを取得したい場合の理解方法 -メソッドでMPMediaItemCollection
クラスのメディア アイテムを 1 つ取得する必要があり- (MPMediaItem *)mediaItemForRow: (NSInteger)row
ます。
これに関する問題は、Apple が持っているのと同じ情報が得られないことです。なぜなら、Apple のポッドキャスト アプリをチェックインしたからです。私は個々のポッドキャスト エピソードからしかコメントを取得しないため、データを取得する別の方法を使用する必要があります。また、特定のポッドキャストのアートワークしか入手できません。ポッドキャスト アプリでは、すべてアートワークがあります。
それで、私はここで何か間違ったことをしているに違いありませんか?
@interface testclassViewController ()
@property (nonatomic, strong) NSArray *audiobooks;
@end
@implementation testclassViewController
- (void)viewDidLoad
{
[super viewDidLoad];
MPMediaItem *mediaItem = [self mediaItemForRow:0];
self.testText.text = [mediaItem valueForProperty:MPMediaItemPropertyComments];
MPMediaItemArtwork *img = [mediaItem valueForProperty:MPMediaItemPropertyArtwork];
UIImage *artworkUIImage = [img imageWithSize:CGSizeMake (128, 128)];
self.testImage.image = artworkUIImage;
}
#pragma mark - query settings
- (MPMediaPropertyPredicate *)mediaTypeToFetchFromiPodLibrary
{
MPMediaPropertyPredicate *abPredicate =
[MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInt:MPMediaTypePodcast]
forProperty:MPMediaItemPropertyMediaType];
return abPredicate;
}
- (MPMediaQuery *)setMediaQueryOptions: (MPMediaQuery*)abQuery
withPredicate: (MPMediaPropertyPredicate*) abPredicate
{
[abQuery addFilterPredicate:abPredicate];
//[abQuery setGroupingType:MPMediaGroupingAlbum];
[abQuery setGroupingType:MPMediaGroupingPodcastTitle];
return abQuery;
}
#pragma mark -
- (MPMediaItem *)mediaItemForRow: (NSInteger)row
{
NSArray *audiobooks = self.audiobooks;
MPMediaItem *mediaItem = nil;
id object = audiobooks[row];
if ([object isKindOfClass:[MPMediaItemCollection class]]) {
MPMediaItemCollection *book = (MPMediaItemCollection *)object;
id item = [book items][0];
if ([item isKindOfClass:[MPMediaItem class]]) {
mediaItem = (MPMediaItem *)item;
}
}
return mediaItem;
}
/* Get´s the sub items for Podcasts title */
- (NSArray *)subMediaItemsForPodcastTitle: (NSString *)podcastTitle
{
NSMutableArray *subMediaItemsToReturn = [NSMutableArray array];
for (id collections in self.audiobooks) {
if ([collections isKindOfClass:[MPMediaItemCollection class]]) {
MPMediaItemCollection *collection = (MPMediaItemCollection *)collections;
for (id mediaItems in collection.items) {
MPMediaItem *mediaitem = (MPMediaItem *)mediaItems;
NSString *mediaItemTitle = [mediaitem valueForProperty:MPMediaItemPropertyPodcastTitle];
if ([mediaItemTitle isEqual:podcastTitle]) {
//NSLog(@"found mediaItem belonging to title: %@",mediaItemTitle);
[subMediaItemsToReturn addObject:mediaitem];
}
}
}
}
return subMediaItemsToReturn;
}
// property getter
- (NSArray *)audiobooks
{
MPMediaPropertyPredicate *abPredicate = [self mediaTypeToFetchFromiPodLibrary];
MPMediaQuery *abQuery = [[MPMediaQuery alloc] init];
abQuery = [self setMediaQueryOptions:abQuery withPredicate:abPredicate]; // Abstract
NSArray *books = [abQuery collections];
return books;
}
@end