2015-10-19 29 views
0

我有一段代碼,以前在Xcode 6工作,但不是現在在Xcode 7.不工作我有它的照片這裏errorsSWIFT代碼在Xcode 7(setCategory,AVFormatIDKey,AVAudioRecorder)

我關於「無法賦值」,「無法調用 初始值設定項」,「無法調用Setcategory」3個錯誤,我得到3錯誤此外,這裏是代碼,任何想法我做錯了什麼?

最佳,

import UIKit 
import AVFoundation 

class RecordViewController: UIViewController { 

required init?(coder aDecoder: NSCoder) { 


    var baseString : String = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as String 
    self.audioURL = "sound.m4a" 
    var pathComponents = [baseString, self.audioURL] 
    var audioNSURL = NSURL.fileURLWithPathComponents(pathComponents) 
    var session = AVAudioSession.sharedInstance() 
    session.setCategory(AVAudioSessionCategoryPlayAndRecord, error: nil) 

    var recordSettings: [NSObject : AnyObject] = Dictionary() 
    recordSettings[AVFormatIDKey] = kAudioFormatMPEG4AAC 
    recordSettings[AVSampleRateKey] = 44100.0 
    recordSettings[AVNumberOfChannelsKey] = 2 

    self.audioRecorder = AVAudioRecorder(URL: audioNSURL, settings: recordSettings, error: nil) 
    self.audioRecorder.meteringEnabled = true 
    self.audioRecorder.prepareToRecord() 

    super.init(coder: aDecoder) 
} 


@IBOutlet weak var recordButton: UIButton! 
@IBOutlet weak var playButton: UIButton! 
@IBOutlet weak var saveButton: UIBarButtonItem! 

var audioRecorder : AVAudioRecorder 
var audioURL = "" 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.playButton.enabled = false 
    self.saveButton.enabled = false 

    // Do any additional setup after loading the view. 
} 

@IBAction func cancelTapped(sender: AnyObject) { 
    self.dismissViewControllerAnimated(true, completion: nil) 
} 

@IBAction func saveTapped(sender: AnyObject) { 
} 

@IBAction func recordTapped(sender: AnyObject) { 
    self.playButton.enabled = true 
} 

@IBAction func playTapped(sender: AnyObject) { 
} 

}

回答

1

試試這個:

do { 
     try session.setCategory(AVAudioSessionCategoryPlayAndRecord) 
} catch (_) { 

} 

var recordSettings: [String : AnyObject] = Dictionary() 
recordSettings[AVFormatIDKey] = NSNumber(unsignedInt: kAudioFormatMPEG4AAC) 
recordSettings[AVSampleRateKey] = 44100.0 
recordSettings[AVNumberOfChannelsKey] = 2 

self.audioRecorder = AVAudioRecorder() 

do { 
     self.audioRecorder = try AVAudioRecorder(URL: audioNSURL!, settings: recordSettings) 
} catch (_) { 

} 

基本上,斯威夫特2,你需要處理異常和類型轉換有點不同。

+0

非常感謝您的答覆阿比納夫。我按照你的建議跟蹤,前兩個錯誤消失了。對於第三個,我仍然得到「無法調用初始化程序...」 – NewbieWantsToMaster

+0

請你附上錯誤的截圖。對我來說,當我回應時,一切看起來都很好。 – Abhinav

+0

非常感謝Abhinav。感謝Abhinav,這個問題解決了。此外,對於第三個錯誤,我錯誤地沒有完全遵循Abhinav答案,並且我有「var recordSettings:[NSObject:AnyObject] = Dictionary()」而不是「var recordSettings:[String:AnyObject] = Dictionary()」。在改變了Abhinav之前的建議之後,代碼開始再次運行。我衷心感謝你。 – NewbieWantsToMaster

0

我一直在努力了很長的時間來解決這個問題,以下是解決方案,希望它可以幫助你,在Xcode中7.3.1運行

do { 
    try session.setCategory(AVAudioSessionCategoryPlayAndRecord) 
} catch { 
} 
//i think most of the problem come from here 
var recordSettings = [AVFormatIDKey : NSNumber(unsignedInt: kAudioFormatMPEG4AAC), 
         AVSampleRateKey : 44100 as NSNumber, 
         AVNumberOfChannelsKey : 1 as NSNumber, 
         AVEncoderAudioQualityKey :AVAudioQuality.Low.rawValue as NSNumber 
     ] 

self.audioRecorder = AVAudioRecorder() 

do { 
    self.audioRecorder = try AVAudioRecorder(URL: audioNSURL!, settings: recordSettings) 
} catch{ 
}