'PlaySoundsViewController'类型的值没有成员'recordedAudio'

时间:2016-03-26 22:19:25

标签: ios xcode swift

我一直在使用Swift 教程关注Udacity的介绍iOS应用程序开发,但是出现了这个错误。

Value of type 'PlaySoundsViewController' has no member 'recordedAudio'

第84行有错误。

playSoundsVC.recordedAudio = recordedAudioURL

以下是整个代码:

import UIKit
import AVFoundation

class RecordSoundsViewController: UIViewController , AVAudioRecorderDelegate {

@IBOutlet weak var recordingInProgress: UILabel!
@IBOutlet weak var stopButton: UIButton!
@IBOutlet weak var recordButton: UIButton!

var audioRecorder:AVAudioRecorder!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

override func viewWillAppear(animated: Bool) {
    //TODO: Hide stop button
    stopButton.hidden = true
    //TODO: Enable recordButton
    recordButton.enabled = true
}

@IBAction func recordAudio(sender: AnyObject) {
    //TODO: Show text "recording in progress"
    recordingInProgress.hidden = false
    //TODO: Show stopButton
    stopButton.hidden = false
    //TODO: Record the user's voice
    print("in recordAudio")
    //TODO: Disable recording button
    recordButton.enabled = false

    let dirPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask, true)[0] as String
    let recordingName = "recordedVoice.wav"
    let pathArray = [dirPath, recordingName]
    let filePath = NSURL.fileURLWithPathComponents(pathArray)
    print(filePath)

    let session = AVAudioSession.sharedInstance()
    try! session.setCategory(AVAudioSessionCategoryPlayAndRecord)

    try! audioRecorder = AVAudioRecorder(URL: filePath!, settings: [:])
    audioRecorder.meteringEnabled = true
    audioRecorder.prepareToRecord()
    audioRecorder.record()
}

@IBAction func stopRecording(sender: AnyObject) {
    //TODO: hide recordingInProgress label
    recordingInProgress.hidden = true
    recordButton.enabled = true
    let audioSession = AVAudioSession.sharedInstance()
    try! audioSession.setActive(false)
}

func audioRecorderDidFinishRecording(recorder: AVAudioRecorder, successfully flag: Bool) {
    print("AVAudioRecorder finished saving recording")
    if (flag) {
        self.performSegueWithIdentifier("stopRecording", sender: audioRecorder.url)
    } else {
        print("Saving of recording failed")
    }
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if (segue.identifier == "stopRecording") {
        let playSoundsVC = segue.destinationViewController as!
            PlaySoundsViewController
        let recordedAudioURL = sender as! NSURL
        playSoundsVC.recordedAudio = recordedAudioURL
    }
}

}

3 个答案:

答案 0 :(得分:2)

class PlaySoundsViewController: UIViewController {
   var recordedURL: URL?
   override func viewDidLoad() {
        super.viewDidLoad()
    }
}

别忘了添加segue的标识符: enter image description here

答案 1 :(得分:1)

添加var recordedAudioURL:URL!到你的PlaySoundsViewController文件 它是一个变量,它将url保存在从当前类发送的下一个类中。 快乐的编码:)

答案 2 :(得分:0)

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if (segue.identifier == "stopRecording") {
        let playSoundsVC = segue.destinationViewController as! PlaySoundViewController
        let recordedAudioURL = sender as! NSURL
        playSoundsVC.recordedAudioURL = recordedAudioURL
    }
}