我有一个非常简单的问题。我想将audiofiles放入我的表视图中。我如何区分它们与PDF和电影等?
我通过Scripting Bridge从iTunes获取它们:
iTunesSource *source = [[[self iTunes] sources] objectAtIndex:0];
iTunesPlaylist *mainPlaylist = [[source libraryPlaylists] objectAtIndex:0] ;
library_ = [[NSArray arrayWithArray:[mainPlaylist tracks]] retain ] ;
这给我一个错误,说无法找到类iTunesFileTrack(在链接时) :
[track get];
if(![track isKindOfClass:[iTunesFileTrack class]]) {
DLog1(@"SKIPPING kind: %@", [track kind]);
}
我确定我错过了一些简单的事情:)
相关说明:是否有更快的方式来阅读iTunes资料库?我只是建议从xml文件加载它,但这对我来说似乎不安全。如果苹果在下一个版本中改变了什么,我就搞砸了。
谢谢
编辑:使用sdef /Applications/iTunes.app | sdp -fhm --basename iTunes
我可以生成我需要检查类的.m文件。但它似乎不起作用:
[track get];
if(![[track className] isEqualToString:@"ITunesFileTrack"]) {
DLog1(@"SKIPPING kind: %@", [track kind]);
continue;
}
Skipps只是我的流:P不是电影。 (即使我添加(track.videoKind != iTunesEVdKNone)
)。甚至PDF都是iTunesFileTracks。但.h说:
// a track representing an audio file (MP3, AIFF, etc.)
@interface iTunesFileTrack : iTunesTrack
答案 0 :(得分:1)
我在我的代码中使用了类似的内容,因此它应该可以正常工作(app
是iTunes SBApplication
):
1。)首先获取库源
- (ITunesSource *)librarySource {
NSArray *sources = [[app sources] get];
NSArray *libs = [sources filteredArrayUsingPredicate:[NSPredicate
predicateWithFormat:@"kind == %i",
ITunesESrcLibrary]];
if ([libs count]) {
return [libs objectAtIndex:0];
}
return nil;
}
2。)迭代库播放列表
NSArray *libraryLists = [[[self librarySource] libraryPlaylists] get];
for (ITunesLibraryPlaylist *list in libraryLists) {
NSArray *listTracks = [[list fileTracks] get];
for (ITunesTrack *listTrack in listTracks) {
// do stuff...
}
[listTracks release];
}
3.)您可以检查其他类型的轨道
if (track.videoKind != ITunesEVdKNone || track.podcast) {
// track is not of type music
}