本文介绍了从Spotify下载封面图片URL并观察关键值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在应用程序的表视图中显示Spotify曲目列表,并且我想下载这些曲目所属专辑的封面艺术。

我登录了CocoaLibSpotify,我可以播放所有曲目,所以这部分很好。我似乎不能开始工作的是下载封面艺术。我遵循SimplePlayer项目的代码,只是我将SPTrack实例存储在一个可变的字典(TracksDownladingForCoverArt)中,因为可能有许多曲目在下载封面艺术。

所以,我是这样做的:

[[SPSession sharedSession] trackForURL:nativeSpotifyURL callback:^(SPTrack *track) {
    if (track != nil) {

        [track addObserver:self forKeyPath:@"album.cover.spotifyURL" options:0 context:NULL];
        self.tracksDownloadingForCoverArt[nativeSpotifyURL] = track;

        [SPAsyncLoading waitUntilLoaded:track timeout:kSPAsyncLoadingDefaultTimeout then:^(NSArray *tracks, NSArray *notLoadedTracks) {
            if ([tracks count] > 0) {
                // I don't believe I need to do anything here
            }
        }];
    }
}];

observeValueForKeyPath:ofObject:change:context:被调用一次,其值分别为nil和nil,但之后什么都不调用。然而,如果我严格遵循SimplePlayer(即使用self.CurrentTrack而不是字典)并注册密钥路径@"self.CurrentTrack.alum.cover.spotifyURL",observerValue...方法被调用两次,一次使用nil,一次使用实际值。

我错过了什么?哦,我注册的是spotifyURL,而不是图像,这样我就可以缓存图像了。这样,当用户退出应用程序并稍后返回时,不必重新加载所有图像。

推荐答案

这是预期行为-除非您显式请求封面图片以降低数据使用率,否则不会加载封面图片。要加载所有封面图片,您可以执行以下…操作

NSArray *tracksToGetArtFor = …; // Get some tracks;
[SPAsyncLoading waitUntilLoaded:tracks timeout:kSPAsyncLoadingDefaultTimeout then:^(NSArray *loadedTracks, NSArray *notLoadedTracks) {

    NSArray *coverArts = [tracks valueForKey:@"album.cover"]; // Get an array of the track's covers

    [SPAsyncLoading waitUntilLoaded:coverArts timeout:kSPAsyncLoadingDefaultTimeout then:^(NSArray *loadedCovers, NSArray *notLoadedCovers) {
        NSLog(@"Number of covers that're loaded: %@:", @(loadedCovers.count));
    }];
]};

您可能需要较长的超时时间来加载大量封面,因为它们可能相当大。

如果您不想对封面使用SPAsyncLoading,另一种方法是使用SPAsyncLoading然后在每个音轨的album.cover属性上使用KVO加载音轨。要强制所有封面开始加载,需要调用每个封面的-startLoading方法。例如:

NSArray *tracksToGetArtFor = …; // Get some tracks;
[SPAsyncLoading waitUntilLoaded:tracks timeout:kSPAsyncLoadingDefaultTimeout then:^(NSArray *loadedTracks, NSArray *notLoadedTracks) {

    NSArray *coverArts = [tracks valueForKey:@"album.cover"]; // Get an array of the track's covers

    // Trigger the -startLoading method of each cover.
    [coverArts makeObjectsPerformSelector:@selector(startLoading)];

]};

这篇关于从Spotify下载封面图片URL并观察关键值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-22 16:27