簡體   English   中英

在iOS 8.3上SpriteKit playSoundFileNamed崩潰

[英]SpriteKit playSoundFileNamed crash on iOS 8.3

我從我的應用程序的崩潰日志中看到一些少量的SpriteKit playSoundFileNamed崩潰。 崩潰發生在iOS 8.3上。

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:]
...

有誰知道導致這次崩潰的原因以及如何解決這個問題? 我應該將每個調用包裝到playSoundFileNamed:在try-catch塊中嗎?

編輯

更多信息:

我正在使用Swift。 試圖播放我自己的聲音,我看到來自不同聲音的崩潰。 我也看到了iOS 8.2中的一些報告,因此這次崩潰可能不是iOS 8.3特有的。

播放聲音的線條:

var sound = SKAction.playSoundFileNamed("Sound/ABC.mp3", waitForCompletion: false)
self.runAction(sound)

我前段時間遇到過類似的問題。 問題是變量無法快速播放,因為每次用戶點擊屏幕時我都會創建變量。 嘗試在didMoveToView中定義操作,並查看是否仍然遇到問題。 希望有所幫助

試試這個,讓我知道它的工作原理。

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)")
    }
}

我有類似的問題。 我的游戲(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)
}

然后,在某些SKSpriteNode中例如:

func playSound1()
{
    self.runAction(Sounds.SOUND1)
}

在這里找到類似/相同的問題: 重復時Skaction.playsoundfilenamed崩潰 - 精靈工具包

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM