2015-10-19 78 views
2

我有一段代碼,以前在雨燕1.2的工作而不是現在在斯威夫特我試圖去改變它,但我得到一個錯誤:errorSWIFT代碼在Xcode 7不工作 - 不能調用初始化

「Can not invoke initializer ...」,

此外,這裏是代碼。你能讓我知道我做錯了什麼嗎?

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() 
     do { 
      try session.setCategory(AVAudioSessionCategoryPlayAndRecord) 
     } catch (_) { 
     } 
    //  session.setCategory(AVAudioSessionCategoryPlayAndRecord, error: nil) 

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

    //  self.audioRecorder = AVAudioRecorder(URL: audioNSURL, settings: recordSettings, error: nil) 
     self.audioRecorder = AVAudioRecorder() 

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

     } 
     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) { 
    } 
} 

回答

2

類型settings參數應該是[String: AnyObject]因爲初始化聲明如下:

public init(URL url: NSURL, settings: [String : AnyObject]) throws 

的固定,這是改變recordSettings類型爲[String: AnyObject]的方式,使一個。

var recordSettings: [String: AnyObject] = Dictionary() 
+0

感謝Katsumi這個問題解決了。我從NSObject更改爲字符串,現在錯誤消失了。 另外,感謝rmaddy編輯帖子。 – NewbieWantsToMaster