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ファイルからロードすることをお勧めしますが、それは安全ではないようです。Apple が次のリリースで何か変更したら、私はうんざりします。

ありがとうございました

編集: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

コードで次のようなものを使用しているため、動作するはずです(appiTunes です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 に答える