2017-08-22 8 views
1

AVAudioPlayerの他の応答を.stop()でクラッシュしましたが、私の質問には直接触れません。AVAudioPlayerが宣言され、初期化されたAVAudioPlayerがまだクラッシュします。

マイAVAudioPlayerクラスのプロパティであり、それを宣言するとき、私はそれを初期化:

var audioPlayer = AVAudioPlayer() 

次のように私のplaySoundコードは次のとおりです。

func playSound(soundName: String, audioPlayer: inout AVAudioPlayer) { 
    // Can we load in the file soundName? 
    if let sound = NSDataAsset(name: soundName) { 
     // check if sound.data is a sound file 
     do { 
      try audioPlayer = AVAudioPlayer(data: sound.data) 
      audioPlayer.play() 
     } catch { 
      // if sound.data is not a valid audio file 
      print("ERROR: data in \(soundName) couldn't be played as a sound.") 
     } 
    } else { 
     // if reading in the NSDataAsset didn't work, tell the user/report the error. 
     print("ERROR: file \(soundName) didn't load") 
    } 
} 

私は再生を停止し、画面上のスイッチ制御を持っています。これはすでに私が音を演奏したときにうまく動作し、演奏音を適切にカットします。

@IBAction func soundSwitchPressed(_ sender: UISwitch) { 
     if !soundSwitch.isOn { 
      audioPlayer.stop() 
     } 
} 

(私も上記のplaySoundを呼び出す前に、どこにでも私のコードでは、スイッチのISONフラグを確認してください)

時にはユーザーは、サウンドの再生をオフにしたい、そして実行することがあります audioPlayer.stop() スレッド1:エラーにXcodeの9コンソール&これに印刷された何もコードクラッシュしますEXC_BAD_ACCESS(コード= 1、アドレス= 0x48)

audioPlayerがnilでない - クラッシュ後はfalseが返された場合、私はlldbを使用します:

po audioPlayer == nil 

も:私は音を再生する場合は、サウンドスイッチを押して再生を停止(正常に動作します)、と私は音の再生をオンにしますが、音が再生されないが、再度クリックし、それが.stopを実行します何も再生していないのにクラッシュしません()。それは全く演奏されない音の状態の下でのみクラッシュする。

私は単純なフラグを設定することができ、オーディオプレーヤーで少なくとも1回サウンドが再生されている場合にのみ.stop()を実行できますが、AVAudioPlayerがなぜ初期化されたのか宣言は.stop()でクラッシュしますが、演奏が成功した後に.stop()が呼び出されるとクラッシュしません。また、すべての演奏が終了してもループしません。私は答えが私がドキュメントなどで見落としているテストに私を指すことを期待します。

希望でした - ありがとう!

+0

プロパティの宣言時にaudioPlayerを2回、playメソッドを呼び出す直前に2回目の初期化を行います。 –

答えて

0

案の修正「playメソッドを呼び出す直前にしたときに第二の特性を宣言するときに一度audioPlayerの二重の初期化を持っており、」以前のコメントで述べたように:オプションとして

  1. がaudioPlayer:

    var audioPlayer: AVAudioPlayer? 
    
  2. プレイストップ時のみコールストップ

    @IBAction func soundSwitchPressed(_ sender: UISwitch) { 
        if !soundSwitch.isOn && audioPlayer?.isPlaying 
         audioPlayer?.stop() 
        } 
    } 
    
関連する問題