Cocoa 如何仅从iTunes主库(通过脚本桥返回)获取音频文件?

Cocoa 如何仅从iTunes主库(通过脚本桥返回)获取音频文件?,cocoa,itunes,scripting-bridge,Cocoa,Itunes,Scripting Bridge,我有一个很简单的问题。我想把音频文件放到我的表视图中。如何将它们与PDF和电影等区分开来 我通过脚本桥从iTunes获得它们: iTunesSource *source = [[[self iTunes] sources] objectAtIndex:0]; iTunesPlaylist *mainPlaylist = [[source libraryPlaylists] objectAtIndex:0] ; library_ = [[NSArray arrayWithA

我有一个很简单的问题。我想把音频文件放到我的表视图中。如何将它们与PDF和电影等区分开来

我通过脚本桥从iTunes获得它们:

    iTunesSource *source = [[[self iTunes] sources] objectAtIndex:0];
    iTunesPlaylist *mainPlaylist = [[source libraryPlaylists] objectAtIndex:0] ;
    library_ = [[NSArray arrayWithArray:[mainPlaylist tracks]] retain ] ;
这给了我一个错误,说类iTunesFileTrack找不到(在链接时) :

我肯定我遗漏了一些简单的东西:)

相关提示:有没有更快的方式阅读iTunes库?我只是建议从xml文件加载它,但这对我来说似乎不安全。如果苹果在下一个版本中做了任何改变,我就完蛋了

多谢各位

编辑:使用
sdef/Applications/iTunes.app | sdp-fhm--basename iTunes
我可以生成需要检查类的.m文件。但它似乎不起作用:

[track get];         
if(![[track className] isEqualToString:@"ITunesFileTrack"]) {
    DLog1(@"SKIPPING kind: %@", [track kind]);
    continue;
}
只跳过我的流:p不跳过电影。(即使我添加了
(track.videoKind!=iTuneseVdnone)
)。甚至PDF都是iTunesFileTracks。但是.h声明:

// a track representing an audio file (MP3, AIFF, etc.)
@interface iTunesFileTrack : iTunesTrack

我在我的代码中使用了类似的东西,所以应该可以使用(
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.)反复浏览库播放列表

3.)您可以检查其他轨道类型,如

if (track.videoKind != ITunesEVdKNone || track.podcast) {
  // track is not of type music
}

谢谢你的回复。但我只想找到音频文件。那些列表曲目是电影、PDF等。你知道如何只获取音频文件吗?这似乎不起作用。它不会遗漏视频。它在我的应用程序中起作用。我使用它的目的是一样的——过滤掉播客和电影。你如何过滤掉PDF?PDF无论如何都不是轨道项目。
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];
}
if (track.videoKind != ITunesEVdKNone || track.podcast) {
  // track is not of type music
}