2012-07-05 109 views
0

我正在使用cocoalibspotify进行Spotify iOS应用。SPPlaylistCallbackProxy播放列表:发送到已释放实例的消息

在我的应用程序的一个点上,我创建了一个新的播放列表并向播放列表中添加了一些曲目。当这样做时,由于创建的播放列表实例似乎已被释放,因此我发生了崩溃。

这是代码的样子:

[[[SPSession sharedSession] userPlaylists] 
createPlaylistWithName:playlistName 
callback:^(SPPlaylist *createdPlaylist) { 
    if (createdPlaylist) { 
      [SPAsyncLoading waitUntilLoaded:createdPlaylist 
            then:^(NSArray *playlists) { 
             // Load all tracks using the URI's and add them to the playlist 
             SPPlaylist *playlist = [playlists objectAtIndex:0]; 
             for (NSString *trackUri in trackUris) { 
              [[SPSession sharedSession] 
               trackForURL:[NSURL URLWithString:trackUri] 
               callback:^(SPTrack *track) { 
               if (track != nil) { 
                [SPAsyncLoading 
                waitUntilLoaded:track 
                then:^(NSArray *tracks) { 
                 [playlist addItems:tracks atIndex:0 callback:NULL]; 
                }]; 
               } 
              }]; 
             } 
            }]; 
    }}]; 

这是日志消息:

*** -[SPPlaylistCallbackProxy playlist]: message sent to deallocated instance 0x100e0120 

我试图保留在我的课的播放列表,但我仍然得到同样的问题。我在这里错过了很明显的东西吗

奖励问题:创建播放列表或载入曲目后(即使用-trackForURL:callback),我必须使用SPAsyncLoading,还是始终已加载对象?

(注:我在我的项目中使用ARC)

编辑:我跑了僵尸工具,看看发生了什么事情,得到了以下结果时坠毁: Retain/release history of the instance

回答

1

如果您有一个对象(SPTrack等),您可以将其添加到播放列表而无需等待它加载,因为只加载元数据处理。您可能需要等待播放列表加载,以便知道您使用的索引是否正确(但在此情况下,0将始终有效)。

现在看看你的问题的肉。这很可能是CocoaLibSpotify中的一个错误 - 你的代码看起来很好。

+0

解决https://github.com/spotify/cocoalibspotify/issues/80。 – 2012-08-09 12:48:11

相关问题