Ios Can';无法检索所有用户播放列表

Ios Can';无法检索所有用户播放列表,ios,spotify,cocoalibspotify-2.0,Ios,Spotify,Cocoalibspotify 2.0,我正在尝试检索用户的播放列表。我参考了cocoalibspotify的简介样本,但是我只得到了两首歌曲,其中有两首来自星号歌曲。 有什么我错过的吗?此外,api/TopList是否可以作为替代方案?我更习惯于使用json数据,因此如果有一种替代cocoalibspotify的方法来检索用户的播放列表,我想尝试一下 -(NSArray *)tracksFromPlaylistItems:(NSArray *)items { NSMutableArray *tracks = [NSMutableA

我正在尝试检索用户的播放列表。我参考了cocoalibspotify的简介样本,但是我只得到了两首歌曲,其中有两首来自星号歌曲。 有什么我错过的吗?此外,api/TopList是否可以作为替代方案?我更习惯于使用json数据,因此如果有一种替代cocoalibspotify的方法来检索用户的播放列表,我想尝试一下

-(NSArray *)tracksFromPlaylistItems:(NSArray *)items {

NSMutableArray *tracks = [NSMutableArray arrayWithCapacity:items.count];

for (SPPlaylistItem *anItem in items) {
    if (anItem.itemClass == [SPTrack class]) {
        [tracks addObject:anItem.item];
    }
}

return [NSArray arrayWithArray:tracks];
}
-(void)getMyTracks {
    [SPAsyncLoading waitUntilLoaded:[SPSession sharedSession] timeout:kSPAsyncLoadingDefaultTimeout then:^(NSArray *loadedSession, NSArray *notLoadedSession) {
        NSLog(@"SPOTIFY [%@ %@]: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), @"Session loaded.");

        [SPAsyncLoading waitUntilLoaded:[SPSession sharedSession] timeout:kSPAsyncLoadingDefaultTimeout then:^(NSArray *loadedContainers, NSArray *notLoadedContainers) {
            NSLog(@"[%@ %@]: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), @"Container loaded.");

            NSMutableArray *playlists = [NSMutableArray array];
            [playlists addObjectsFromArray:[SPSession sharedSession].userPlaylists.playlists];
            [playlists addObject:[SPSession sharedSession].starredPlaylist];
            [playlists addObject:[SPSession sharedSession].inboxPlaylist];
            //[playlists addObjectsFromArray:[SPSession sharedSession].userPlaylists.flattenedPlaylists];

            [SPAsyncLoading waitUntilLoaded:playlists timeout:kSPAsyncLoadingDefaultTimeout then:^(NSArray *loadedPlaylists, NSArray *notLoadedPlaylists) {
                // All of our playlists have loaded their metadata — wait for all tracks to load their metadata.
                NSLog(@"[%@ %@]: %@ of %@ playlists loaded.", NSStringFromClass([self class]), NSStringFromSelector(_cmd),
                      [NSNumber numberWithInteger:loadedPlaylists.count], [NSNumber numberWithInteger:loadedPlaylists.count + notLoadedPlaylists.count]);
                NSArray *playlistItems = [loadedPlaylists valueForKeyPath:@"@unionOfArrays.items"];
                NSArray *tracks = [self tracksFromPlaylistItems:playlistItems];

                [SPAsyncLoading waitUntilLoaded:tracks timeout:kSPAsyncLoadingDefaultTimeout then:^(NSArray *loadedTracks, NSArray *notLoadedTracks) {
                    // All of our tracks have loaded their metadata. Hooray!
                    NSLog(@"[%@ %@]: %@ of %@ tracks loaded.", NSStringFromClass([self class]), NSStringFromSelector(_cmd),
                          [NSNumber numberWithInteger:loadedTracks.count], [NSNumber numberWithInteger:loadedTracks.count + notLoadedTracks.count]);
                    NSMutableArray *theTrackPool = [NSMutableArray arrayWithCapacity:loadedTracks.count];
                    for (SPTrack *track in loadedTracks) {
                        if (track.availability == SP_TRACK_AVAILABILITY_AVAILABLE && [track.name length] > 0) {

                            NSLog(@"TRACK %@ %@ %@",track.name,track.artists,track.album.name);
                        }
                    }
                }];
            }];
        }];
    }];
}

我猜简介并没有尝试加载所有的播放列表——它只是在几秒钟内尽可能地加载播放列表

在CocoaLibSpotify中加载整个播放列表树(特别是如果您还试图加载所有曲目)可能需要相当长的时间,尤其是在第一次运行时,因为没有缓存任何内容

通常,对于UI,您只希望加载播放列表以供显示(而不是其曲目)。当用户选择播放列表时,您就开始加载要显示的曲目


一次加载所有的播放列表和它们的所有曲目,就像Guess的简介一样,会给系统带来很大的压力,所有的元数据加载都需要很长时间。如果你真的,真的必须一次加载所有内容,1)准备来自播放列表较多/较大的用户的崩溃报告,2)提供更长的超时时间。

我明白了。您有一个很好的观点,就是先加载播放列表,然后在选择播放列表后加载曲目。我还通过将.userplaylists放在第二次SPAsyncLoad的[SPSSession sharedSession]上解决了我的问题。但是,我在没有封面的相册上遇到错误。正如您在另一个问题中提到的,我必须删除为null的coverArt。我正在考虑用默认图像替换它。这可以通过创建SPImage并将其放置到包含null值的项来实现吗?我如何开始创造一个SPImage呢;我可以通过取消对[playlists addObjectsFromArray:[SPSSession sharedSession].userPlaylists.FlattedPlaylists]的注释来实现这一点;但是,它会导致某些项目出现[NSNULL isLoaded],并且我的应用程序崩溃。有什么建议吗?