gpt4 book ai didi

ios - cocoalibspotify : Crash during playback callback under music_delivery

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:12:41 27 4
gpt4 key购买 nike

我们在使用 cocoalibspotify 播放时出现崩溃:问题看起来像在 SPSession.m 下的回调函数 music_delivery() 中,实例启动的回调不是 SPSessionAudioDeliveryDelegate 兼容实例。但是,我们使用的唯一与播放相关的实例是 SPPlaybackManager。我们用来使用 spotify 播放歌曲的函数是:

#pragma mark - Domain function
- (void)searchForKeywords:(NSString *)keywords{
//construct search string
SPSearch *search = [[SPSearch alloc] initWithSearchQuery:keywords inSession:[SPSession sharedSession]];

//search track
[SPAsyncLoading waitUntilLoaded:search timeout:kSPAsyncLoadingDefaultTimeout then:^(NSArray *results, NSArray *notLoadedResults) {
if ([results count]>0) {
//search returns results.
SPSearch *thisSearch = [results objectAtIndex:0];
if ([[thisSearch tracks] count]>0) {

// Add loading flag for album art
[[ImageManager sharedInstance] setLoadingFlagForSong:self.namedSong];

SPTrack *track = [[thisSearch tracks]objectAtIndex:0];

[SPAsyncLoading waitUntilLoaded:track timeout:kSPAsyncLoadingDefaultTimeout then:^(NSArray *tracks, NSArray *notLoadedTracks) {

self.currentTrack = track;
}];
}else{
}

}else{
//search didn't return results.
}
}];
}

- (void)play
{
[SPSession dispatchToLibSpotifyThread:^{
[[SPSession sharedSession]setPlaybackDelegate:self];

// Change the current track of the session
if (currentTrack) {

self.playbackManager = [[SPPlaybackManager alloc] initWithPlaybackSession:[SPSession sharedSession]];
[[SPSession sharedSession]setPlaybackDelegate:self];

[self.playbackManager playTrack:currentTrack callback:^(NSError *error) {

// Failure playing
if (error) {
}
// Success
}];
}

// Play
else {
}
}];
}

- (void)pause
{
[SPSession dispatchToLibSpotifyThread:^{
[SpotifyHelper sharedInstance].playbackManager.isPlaying = NO;
} waitUntilDone:YES];
}


- (void)stop
{
[SPSession dispatchToLibSpotifyThread:^{
[SpotifyHelper sharedInstance].playbackManager.isPlaying = NO;
[[SpotifyHelper sharedInstance].playbackManager sessionDidEndPlayback:[SPSession sharedSession]];
} waitUntilDone:YES];
}

-(void)seekToLocation:(float)location
{
[SPSession dispatchToLibSpotifyThread:^{
[[SpotifyHelper sharedInstance].playbackManager seekToTrackPosition:location * self.currentTrack.duration];
} waitUntilDone:YES];
}

错误信息:-[__NSCFType session:shouldDeliverAudioFrames:ofCount:streamDescription:]: 无法识别的选择器发送到实例 0x21328a90

Stack:
0 libsystem_kernel.dylib __pthread_kill + 8
1 libsystem_c.dylib pthread_kill + 58
2 libsystem_c.dylib abort + 94
3 libc++abi.dylib abort_message + 74
4 libc++abi.dylib default_terminate() + 24
5 libobjc.A.dylib _objc_terminate() + 146
6 libc++abi.dylib safe_handler_caller(void (*)()) + 78
7 libc++abi.dylib std::terminate() + 19
8 libc++abi.dylib __cxa_throw + 122
9 libobjc.A.dylib objc_exception_throw + 94
10 CoreFoundation __methodDescriptionForSelector
11 CoreFoundation ___forwarding___ + 392
12 CoreFoundation _CF_forwarding_prep_0 + 24
crash->13 OURAPP music_delivery
14 OURAPP sp_playlist_get_offline_download_completed
15 OURAPP sp_error_message
16 OURAPP sp_error_message

最佳答案

两件事:

1) 在调用 CocoaLibSpotify 方法时不要分派(dispatch)给 CocoaLibSpotify 线程——这是在内部完成的。删除 dispatchToLibSpotifyThread 行。

2) 删除 [[SPSession sharedSession]setPlaybackDelegate:self]; 行。这就是导致你崩溃的原因。

关于ios - cocoalibspotify : Crash during playback callback under music_delivery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17712864/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com