问题背景
由于原来项目是在7.2版本的demo基础上进行修改的,所以无法升级到8.4,目前在7.2版本会出现选择背景音乐后crash的情况,在8.4的demo上并不会出现这个问题。
问题原因
demo在选择音乐的时候没有将音乐文件的后缀带到路径上面,所以在SDK播放背景音乐的时候崩溃了。
解决方案
更换demo的以下方法即可
代码语言:objective-c复制- (void)_downloadBGMAction:(TCBGMElement*)current {
const BOOL needOverride = YES;
__strong UGCKitBGMHelper* strong = self;
if(strong != nil){
if([[_currentEle netUrl] isEqualToString:[current netUrl]]){
if([_currentTask state] == NSURLSessionTaskStateRunning){
BGMLog(@"暂停:%@", [current name]);
[_currentTask suspend];
return;
}
else if([_currentTask state] == NSURLSessionTaskStateSuspended){
BGMLog(@"恢复:%@", [current name]);
[_currentTask resume];
return;
}
}
else{
if(_currentTask){
if([_currentTask state] != NSURLSessionTaskStateCompleted){
[_currentTask cancel];
[strong.delegate onBGMDownloading:_currentEle percent:0];
}
_currentTask = nil;
}
}
NSString* localListPath = nil;
NSString* url = [current netUrl];
__block NSString* justName = [current name];
if (0 == justName.pathExtension.length) {
NSString *bgmExtension = url.pathExtension.length ? url.pathExtension : @"mp3";
justName = [justName stringByAppendingPathExtension:bgmExtension];
}
if (needOverride) {
localListPath = [_bgmPath stringByAppendingPathComponent:justName];
} else {
justName = [NSString stringWithFormat:@"%@1.%@", [justName stringByDeletingPathExtension], [[current name] pathExtension]];
localListPath = [_bgmPath stringByAppendingPathComponent:justName];
}
__weak __typeof(self) weak = self;
NSURLSessionDownloadTask* task = [self downloadFile:url dstUrl:localListPath callback:^(float percent, NSString* path){
__strong UGCKitBGMHelper* strong = weak;
if(strong){
dispatch_queue_t queue = strong->_queue;
if(percent < 0){
dispatch_async(queue, ^{
[strong.delegate onBGMDownloadDone:current];
});
}
else{
TCBGMElement* ele = [strong->_bgmDict objectForKey:[current netUrl]];
if(path != nil){
ele.localUrl = [NSString stringWithFormat:@"Documents/bgm/%@", justName];
ele.isValid = [NSNumber numberWithBool:true];
dispatch_async(queue, ^{
[strong.delegate onBGMDownloadDone:ele];
});
[strong saveBGMStat:ele];
}else{
dispatch_async(queue, ^{
[weak.delegate onBGMDownloading:ele percent:percent];
});
}
}
}
}];
_currentTask = task;
_currentEle = current;
}
}