アプリケーションのテーブル ビューに Spotify トラックのリストを表示しています。これらのトラックが属するアルバムのカバー アートをダウンロードしたいと考えています。
私は CocoaLibSpotify にログインしており、すべてのトラックを再生できるので、その部分は問題ありません。仕事に取り組めないように見えるのは、カバーアートのダウンロードです。カバー アートをダウンロードするトラックが多数ある可能性があるため、変更可能なディクショナリ (tracksDownladingForCoverArt) に SPTrack インスタンスを格納することを除いて、SimplePlayer プロジェクトのコードに従います。
だから、これは私がすることです:
[[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 で 1 回呼び出されますが、その後は何も呼び出されません。ただし、SimplePlayer を文字に従って (つまり、辞書の代わりに self.currentTrack を使用して) キー パス @"self.currentTrack.album.cover.spotifyURL" に登録すると、observerValue... メソッドが 2 回、1 回呼び出されます。 nil で 1 回、実際の値で 1 回。
私は何が欠けていますか?ああ、画像ではなく、spotifyURL に登録するので、画像をキャッシュできます。そうすれば、ユーザーがアプリを終了して後で戻るときに、すべての画像を再読み込みする必要はありません。