2015-04-02 57 views
1

在我的代碼中,我初始化了兩個單例。我有var session = AVAudioSession.sharedInstancevar audioSession = AVAudioSession.sharedInstance。我然後setActive(false)第二個單身人士。爲什麼我需要創建第二個?爲什麼不能創建第一個單例到setActive(false)爲什麼我需要爲音頻創建一個sharedInstance?

我相信這是因爲單身人士每班只能有一個實例;不過,我只是關閉音頻會話,所以我不明白爲什麼我需要兩個單身人士來做到這一點。

@IBAction func recordAudio(sender: UIButton) { 
    recordButton.enabled = false 
    stopButton.hidden = false 
    recordAudioOutlet.hidden = false 

    //Get a file path to store the audio recording 
    let dirPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String 

    let currentDateTime = NSDate() 
    let formatter = NSDateFormatter() 
    formatter.dateFormat = "ddMMyyyy-HHmmss" 
    let recordingName = formatter.stringFromDate(currentDateTime) 
    let pathArray = [dirPath, recordingName] 
    let filePath = NSURL.fileURLWithPathComponents(pathArray) 
    println(filePath) 

    //Setup audio session 
    var session = AVAudioSession.sharedInstance() 
    session.setCategory(AVAudioSessionCategoryPlayAndRecord, error: nil) 

    //Initialize and prepare the recorder 
    audioRecorder = AVAudioRecorder(URL: filePath, settings: nil, error: nil) 
    audioRecorder.meteringEnabled = true 
    audioRecorder.record() 
} 

@IBAction func stopAudio(sender: UIButton) { 
    //Stop recording the user's voice 
    recordAudioOutlet.hidden = true 
    audioRecorder.stop() 
    var audioSession = AVAudioSession.sharedInstance(); 
    audioSession.setActive(false, error: nil) 
} 
} 
+0

我不明白...你爲什麼認爲你需要兩個單身? – 2015-04-02 03:08:40

+0

事實上,「兩個單身」是一個非sequiter。 AVAudioSession.sharedInstance()總是返回一個實例 - 單例。不是兩次調用'sharedInstance',你可以將第一次調用的引用保存在一個屬性中,然後使用它,但是因爲使用了局部變量,所以需要第二次獲取該引用。 – Paulw11 2015-04-02 03:24:31

+0

@ Paulw11聽起來像將'sharedInstance'設置爲全局屬性而不是局部變量可以解決這個問題嗎? – Michael 2015-04-02 04:11:13

回答

2

AVAudioSession是不能播放(或錄製)2種不同音頻的單一進程。 如果您從您的應用程序開始播放音頻,則正在運行的音頻(如正在聽音樂)將暫停。 爲什麼不製作一個(也許classvariable來管理AVAudiosession

如果您創建變量2次,那麼它就是一樣的(因爲singleton總是返回相同的實例)。

相關問題