2015-07-01 63 views
0

我接收到錯誤在我的TimeView控制器就行 'EXC_BAD_ACCESS(代碼= 2,地址= 0x16fcbbfec)'接收 'EXC_BAD_ACCESS代碼= 2' 在一個OBJ-C至夫特轉換

var soundEffects = SoundEffects() 

和我不知道爲什麼會發生這種情況...

我已經提供了我的源代碼的鏈接,供任何願意看一看並幫助我的人。謝謝!

https://github.com/JohnnyH1012/HRC

相關代碼

import UIKit 
import AVFoundation 

class SoundEffects: NSObject, AVAudioPlayerDelegate { 
    var soundEffects = SoundEffects() 
    var player = AVAudioPlayer() 
    var storage = SettingsStorage() 
    var enabled:Bool = false 
    var newValue:Bool = true 
    var tabata: Tabata! 
    var theme: Theme! 

func registerSoundEffects() { 

    soundEffects = SoundEffects.new() 

    NSNotificationCenter.defaultCenter().addObserver(soundEffects, selector: "stateChanged:", name: StateChanged, object: nil) 
    NSNotificationCenter.defaultCenter().addObserver(soundEffects, selector: "prepareSignal:", name: PrepareSignal, object: nil) 

    var error:NSError? 

    var url: NSURL = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("beep_01", ofType: "mp3")!)! 

    player = AVAudioPlayer(contentsOfURL: url, error: &error) 
    player.numberOfLoops = 0 
    player.prepareToPlay() 
    enabled = storage.loadSoundEnabled() 

} 

func isEnabled() { 

    return enabled = true 

} 

func setEnabled() { 
    enabled = newValue 
    storage.saveSoundEnabled(newValue) 

} 

func stateChanged(notification: NSNotification) { 
    if enabled { 

     var tabata: Tabata! = notification.object! as! Tabata 
     switch tabata.getState() { 
     case .EXERCISE: fallthrough 
     case .RELAXATION: 
      player.play() 
      break 

     default: 
      break 

     } 
    } 
} 

func prepareSignal(notification:NSNotification) { 

    if enabled { 
     player.play() 
    } 

} 

}

回答

0

你有一個無限遞歸循環。當你初始化SoundEffects,它初始化它soundEffects變量,該變量初始化一個SoundEffects對象,該對象初始化soundEffects變種,這...

你看這個問題?

+0

是的,但如何將這個問題能解決? –

+0

好吧,我需要你解釋你的意圖,讓一個類包含一個變量中自己的實例的引用。 – AnthonyM

+0

我不完全確定,我從Github中取回了計時器項目,並試圖理解作者的工作。 –

0

可能與setEnabled二傳手存在衝突。在Swift中,有一些屬性觀察者在變量設置後被調用。

刪除isEnabled()setEnabled()方法使用可變enabled這種方式也可以作爲吸氣

var enabled: Bool = false { 
    didSet { 
     storage.saveSoundEnabled(newValue) 
    } 
} 
+0

在'fun stateChanged(notification:NSNotification)'給出'期望的'get','set','willSet'或'didSet'關鍵字來啓動訪問器定義時,實現你所建議的結果「error –

+0

there there a brace在最後丟失,我編輯帖子 – vadian

+0

好吧,謝謝你修復,但該應用程序仍然崩潰,同樣的錯誤。 –