2016-10-02 8 views
-1

私は音楽をミュートすることができるアプリで機能を作りました。私はそこにスイッチを入れて、オンとオフを切り替えることができます。しかし、スイッチは、アプリケーションで正常に動作するとき、私はコントローラを閉じて、私はそれがまだ残っている方法が表示されますが、それをプルしますが、アプリケーションを閉じて、スイッチをバックアップすると、それはまだ音楽を演奏しています。これは私のコードであり、私は写真を添付し​​ます。ユーザーのデフォルトでデータを保存する

import Foundation 
import UIKit 
import SpriteKit 
import AVFoundation 




var bombSoundEffect: AVAudioPlayer! 
var Ghost = SKSpriteNode() 

class SecondViewController: UIViewController { 

var sw = false 




@IBOutlet var mySwitch: UISwitch! 

@IBAction func switchpressed(_ sender: AnyObject) { 

let defaults = UserDefaults.standard 

    if mySwitch.isOn{ 
       defaults.set(true, forKey: "SwitchState") 

     if bombSoundEffect != nil { 
      bombSoundEffect.stop() 
      bombSoundEffect = nil 

     } 

    } 
    else{ 
     defaults.set(false, forKey: "SwitchState") 

     let path = Bundle.main.path(forResource: "newmusic.wav", ofType:nil)! 
     let url = URL(fileURLWithPath: path) 


     do { 
      let sound = try AVAudioPlayer(contentsOf: url) 
      bombSoundEffect = sound 
      sound.numberOfLoops = -1 
      sound.play() 
     } catch { 
      // couldn't load file :(
     } 

    } 


} 


override func viewDidLoad() { 
    super.viewDidLoad() 

    super.viewDidLoad() 

    let defaults = UserDefaults.standard 

    if (defaults.object(forKey: "SwitchState") != nil) { 
     mySwitch.isOn = defaults.bool(forKey: "SwitchState") 


    } 
} 


override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Release any cached data, images, etc that aren't in use. 
} 


} 

、ここで私が質問をしてください上記の言ったことを理解していなかった場合は、画像 enter image description here です。

+0

あなたのアプリケーションデリゲートで音楽を再生していますか、このビューコントローラのすべてのコードですか? – WMios

答えて

1

あなたのコードからわかるように、あなたはユーザーデフォルトを正しくチェックしていません。 viewDidLoadあなたのユーザーのデフォルト値の値がtrueに設定されているかどうかをチェックする必要があります。

override func viewDidLoad() { 
    super.viewDidLoad() 
    let defaults = UserDefaults.standard 

    //check bool Value is set to true or not 

    if defaults.bool(forKey: "SwitchState") == true { 
     mySwitch.isOn = defaults.bool(forKey: "SwitchState") 

    } else { 
     print("false") 

    } 
} 

このコードを確認してください。うまくいけばそれはあなたを助けるでしょう。

+0

私はエラーは発生していませんが、アプリケーションを再起動しても音楽は再生されますが、スイッチはミュートに切り替えられます –

+0

このコードを試しましたか、アプリケーションデリゲートで何をしているのかを教えてください。 –

+0

条件が実行されるか、他に実行する場合と同様に、アプリを再起動するときは、のviewDidLoadでデバッグすることができ、その後、その状態で、それは行くだろう、私は私のアプリデリゲート –

0

viewDidLoadでは、あなたが音楽を一時停止する必要があるときに確認する必要があります。

// Keep this part the same 
let defaults = UserDefaults.standard 

if (defaults.object(forKey: "SwitchState") != nil) { 
    mySwitch.isOn = defaults.bool(forKey: "SwitchState") 
} 

// Check to see if the switch is off, if so, stop the music 
if !mySwitch.isOn { 
    bombSoundEffect.stop() 
    bombSoundEffect = nil 
} 

あなたはまたsuper.viewDidLoadに重複コールを取り出すことができます。

:あなたのビューコントローラでのより多くのコードがあるようにそこ現在、そこに音楽を演奏することになるというものではないので、この解決策は、与えられた動作しない場合がありますので、それは本当にあなたがいないこと、見えます十分な情報を提供した。

+0

私はあなたが入れたものを正確に入力しました。私がviewControllerを開くと音楽をミュートします –

+0

@OrenEdrichこれはあなたが望むものではありませんか? – WMios

+0

いいえ、私はバックグラウンドでアプリの演劇の音楽を持っている、と私これのViewControllerは、設定メニューです。だから私はそこにユーザーが音楽をミュートすることができるスイッチがあります。しかし、私は、スイッチは、この質問はスーパー不明である@OrenEdrich私たちのオフ –

関連する問題