0

Spotify iOS アプリに cocoalibspotify を使用しています。

アプリのある時点で、新しいプレイリストを作成し、多数のトラックをプレイリストに追加しています。そうすると、作成されたプレイリスト インスタンスの割り当てが解除されたように見えるため、クラッシュが発生します。

コードは次のようになります。

[[[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 を使用しています。)

編集: インストゥルメントでゾンビを実行して何が起こっているかを確認し、クラッシュしたときに次の結果を得ました。 インスタンスの保持・解放履歴

4

1 に答える 1

1

オブジェクト(SPTrackなど)がある場合、ロードはメタデータのみを処理するため、ロードを待たずにプレイリストに追加できます。プレイリストが読み込まれるのを待って、使用しているインデックスが正しいことを確認することをお勧めします(ただし、この場合0は常に有効です)。

今あなたの質問の本質を調べています。これはCocoaLibSpotifyのバグである可能性が高いです-コードは正常に見えます。

于 2012-07-05T10:27:38.703 に答える