2016-10-02 80 views
-1

我在我的應用程序中製作了一個功能,可讓您將音樂靜音,我在此處放置了一個開關,以便您可以在開啓和關閉之間對其進行更改。但是,該開關在應用程序中正常工作,當我關閉vie控制器並將其拉回時,它仍會顯示它是如何離開的,但是當您關閉應用程序並將其打開時,開關看起來好像關閉了但它仍然播放音樂。這是我的代碼,我會附上一張照片。以用戶預設值保存數據

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

我在我的應用程序代理中沒有任何東西 –

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是設置菜單。所以我在那裏有一個允許用戶靜音的開關。但是,如果在我們關閉 –