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

最佳答案

我在代码中使用了类似的内容,因此它应该可以工作(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
}

关于cocoa - 如何仅从iTunes主库中获取音频文件(由Scripting Bridge返回)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5392300/

10-09 01:48
查看更多