K G
K G

Reputation: 11

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

I've been following Udacity's Intro to iOS App Development with Swift tutorial, but got this error.

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

Line 84 has the error.

playSoundsVC.recordedAudio = recordedAudioURL

Here is the entire code:

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

}

Upvotes: 0

Views: 507

Answers (3)

Giang
Giang

Reputation: 3645

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

Don't forget to add an identifier for segue: enter image description here

Upvotes: 3

Devendra
Devendra

Reputation: 11

add var recordedAudioURL:URL! to your PlaySoundsViewController file it is a variable that holds the url in the next class which is been send from the current class. happy coding :)

Upvotes: 1

Frazy Nondo
Frazy Nondo

Reputation: 1

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

Upvotes: 0

Related Questions