objective-c - 如何使用 iTunes.h/Scripting Bridge 获取专辑中的所有轨道

标签 objective-c macos cocoa itunes

我想使用 iTunes.h 获取 iTunes 上专辑中的所有轨道。
现在我通过以下方式获取当前轨道的数据:

NSInteger trackID = iTunes.currentTrack.databaseID;
NSString *name  = iTunes.currentTrack.name;

专辑名称:

NSString *trackAlbum = iTunes.currentTrack.album;

但是我不知道如何获取与当前轨道相同的专辑中的所有轨道。
有任何想法吗?谢谢

最佳答案

iTunes API 写得不好。 您必须使用谓词过滤数组。

NSArray *allSongs = [self allSongs];
NSArray *songsOfAlbum = [allSongs filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"album == %@ && artist == %@", albumString, artistString]];

您可以获得这样的所有歌曲:

// Get all Songs
- (NSArray *)allSongs {
    if (_allSongs == nil) {

        NSArray *tracksToPlay = [(SBElementArray *)[self.library tracks] get];

        // Sort by artist
        _allSongs = tracksToPlay;
    }

    return _allSongs;
}

- (iTunesLibraryPlaylist *)library {
    if (_library == nil) {
        // Whole Library
        iTunesSource *source = [[[[self.iTunes sources] get] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"kind == %i", iTunesESrcLibrary]] objectAtIndex:0];
        // Only the Music
        _library = [[[[source playlists] get] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"specialKind == %i", iTunesESpKMusic]] objectAtIndex:0];
    }

    return _library;
}

关于objective-c - 如何使用 iTunes.h/Scripting Bridge 获取专辑中的所有轨道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14076113/

相关文章:

iphone - xcode 在 View 之间传递 3 个 nsstring 值时遇到问题

objective-c - UITableViewController init 与 initWithStyle

c++ - 我从哪里可以获得适用于 Mac 的 windows.h?

objective-c - NSButton 子类为 colorwell 并防止 NSColorPanel 接触第一响应者

macos - swift 2 : Can't call createDirectoryAtUrl with definition

objective-c - libz.dylib libsqlite3.dylib 不在 Xcode 7 中,解析不保存数据

ios - 推送到 UINavigationController 时 UIViewControllers 出现问题 - iOS 7.1

objective-c - Spotlight 旁边的应用程序

css - 用于删除粗体文本的 Wow JS 解决方案在 Macbook Pro (Google Chrome) 上不起作用

objective-c - 以编程方式跟踪 Mac 上事件应用程序的最佳方法是什么