벨로우 (Bellow)는 iOS 장치의 iPod 라이브러리에있는 항목을 가져 오는 코드입니다. 오른쪽에있는 문제는 바로 MPMediaItemProperty
입니다. 아트 워크와 같은 데이터를 얻고 싶다면 주석의 제목을 이해하십시오. - (MPMediaItem *)mediaItemForRow: (NSInteger)row
메서드에서 MPMediaItemCollection
클래스의 미디어 항목 하나를 가져와야합니다.iPodLibrary에서 팟 캐스트 메타 데이터 가져 오기
이 문제는 제가 애플과 같은 정보를 얻지 못한다는 것입니다 - 왜냐하면 그들의 포드 캐스트 앱을 체크했기 때문입니다. 각 개별 팟 캐스트 에피소드에서만 의견을 얻으므로 다른 방법으로 데이터를 가져와야합니다. 또한 특정 Podcast에만 삽화를 제공합니다. Podcast 앱에서 그들은 모두 작품을 가지고 있습니다.
그래서 나는 여기서 뭔가 잘못하고있을 것입니까?
@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
예 iTunes에서 가져온 것과 동일한 데이터가 Mac에 동기화되어 있습니다. 하지만 iOS의 Podcast/Music Player 앱에서는 다른 곳에서 데이터를 가져옵니다. –
@Dave Thanks for the tip! iTunes 메타 데이터에 대한 [비슷한 질문] (http://stackoverflow.com/q/29283960/1418688)에 대한 답변을 찾고 있는데,이 솔루션이 도움이 될지 궁금합니다. 나는 ID3 태그에 완전히 익숙하지 않으며 [이 기사] (http://www.wikihow.com/Convert-Tags-Between-iTunes-and-ID3)의 "Method 3 of 3" 관련 태그는 ID3으로 표시되지 않지만 (의미는 무엇입니까?) MPMediaItem 등의 "Episode #"및 "Season #"속성에 액세스 할 수있는 기회가 있습니까? – Nerrolken
2017 Swift에서 형식 키는 "org.id3"이 아니라 오히려 상수'AVMetadataFormatID3Metadata'입니다. – NSTJ