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 を使用しています。)
編集: インストゥルメントでゾンビを実行して何が起こっているかを確認し、クラッシュしたときに次の結果を得ました。