0

我有一个很简单的问题。我想将音频文件放入我的表格视图中。我如何将它们与 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;
}

跳过我的流:P 不是电影。(即使我添加(track.videoKind != iTunesEVdKNone))。甚至 PDF 也是 iTunesFileTracks。但是 .h 声明:

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

1 回答 1

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
}
于 2011-03-22T15:59:53.923 回答