iOS 8.3上名为crash的SpriteKit PlaySoundFile
我在我的应用程序的崩溃日志中看到了少量名为SpriteKit PlaySoundFileName的崩溃。这些崩溃发生在iOS 8.3上iOS 8.3上名为crash的SpriteKit PlaySoundFile,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我在我的应用程序的崩溃日志中看到了少量名为SpriteKit PlaySoundFileName的崩溃。这些崩溃发生在iOS 8.3上 0 CoreFoundation __exceptionPreprocess 1 libobjc.A.dylib objc_exception_throw 2 CoreFoundation -[NSException initWithCoder:] 3 SpriteKit +[SKPlaySound playSoundFileNamed:atPosition
0 CoreFoundation __exceptionPreprocess
1 libobjc.A.dylib objc_exception_throw
2 CoreFoundation -[NSException initWithCoder:]
3 SpriteKit +[SKPlaySound playSoundFileNamed:atPosition:waitForCompletion:]
4 SpriteKit +[SKAction(SKActions) playSoundFileNamed:waitForCompletion:]
...
以及一些相关的碰撞:
0 CoreFoundation __exceptionPreprocess
1 libobjc.A.dylib objc_exception_throw
2 CoreFoundation -[NSException raise:format:]
3 SpriteKit +[SKPlaySound playSoundFileNamed:atPosition:waitForCompletion:]
4 SpriteKit +[SKAction(SKActions) playSoundFileNamed:waitForCompletion:]
...
有人知道是什么导致了这次崩溃以及如何修复吗?我是否应该将对PlaySoundFileName:的所有调用都包装在try-catch块中
已编辑
更多信息:
我用的是斯威夫特。试着播放我自己的声音,我看到了来自不同声音的崩溃。我还看到了一些来自iOS 8.2的报告,所以这次崩溃可能不是iOS 8.3特有的 播放声音的台词:
var sound = SKAction.playSoundFileNamed("Sound/ABC.mp3", waitForCompletion: false)
self.runAction(sound)
不久前我也遇到过类似的问题。问题是,由于每次用户点击屏幕时我都在创建变量,因此无法足够快地创建变量来播放。尝试在didMoveToView中定义操作,看看是否仍然存在问题。
希望这对我有帮助。我也有类似的问题。我的游戏(swift+spritekit)在iOS 8.x上崩溃了。但是在9.x上工作得很完美。原木:
2015-12-15 21:27:40.827 MyGame[24055:2285857]
*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'Resource assets/mfx/my_sound.m4a can not be loaded'
*** First throw call stack:
(
0 CoreFoundation 0x008ae746 __exceptionPreprocess + 182
1 libobjc.A.dylib 0x02598a97 objc_exception_throw + 44
2 CoreFoundation 0x008ae66d +[NSException raise:format:] + 141
3 SpriteKit 0x011ca435 +[SKPlaySound playSoundFileNamed:atPosition:waitForCompletion:] + 628
4 SpriteKit 0x011601b4 +[SKAction(SKActions) playSoundFileNamed:waitForCompletion:] + 78
5 MyGame 0x0012eb25
解决方案是:只加载一次所有声音,作为常量(let)。不要每次播放声音时都创建变量
import SpriteKit
import AVFoundation
class Sounds
{
static let SOUND1 = SKAction.playSoundFileNamed("assets/sound1.m4a", waitForCompletion: false)
static let SOUND2 = SKAction.playSoundFileNamed("assets/sound2.m4a", waitForCompletion: false)
}
然后,在某些情况下,例如:
func playSound1()
{
self.runAction(Sounds.SOUND1)
}
在这里找到类似/相同的问题:试试这个,让我知道它是否有效
var audioPlayer = AVAudioPlayer()
func playAudio() {
// Set the sound file name & extension
let alertSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("ABC", ofType: "mp3")!)
// Preperation
try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, withOptions: [])
try! AVAudioSession.sharedInstance().setActive(true)
// Play the sound
do {
try audioPlayer = AVAudioPlayer(contentsOfURL: alertSound)
audioPlayer.prepareToPlay()
audioPlayer.play()
} catch {
print("there is \(error)")
}
}
请提供更多信息:您是想播放自己的声音还是来自系统包的声音?是某个特定的声音导致崩溃还是全部崩溃?它是否仅在iOS 8.3上崩溃?你能粘贴产生/播放声音的线条吗?等等…你用的是什么语言-Swift还是Obj-C?我用的是Swift。试着播放我自己的声音,我看到了来自不同声音的崩溃。我还看到了一些来自iOS 8.2的报告,所以现在可能是iOS 8.3。您是否尝试过使用不同的音频编码和/或不同的声音文件?您好,在哪里可以找到答案?我的一个应用程序在播放声音时崩溃并抛出相同的异常。这种情况并非总是发生,但只有少数情况