我尝试调用记录功能时,我的代码给出了EXC_BAD_ACCESS(代码= 1,地址= 0xb2)

时间:2018-01-17 06:42:04

标签: ios iphone swift swift4

我有一个名为record的类,它具有录制音频的所有功能,然后我在我的主视图控制器类(RecordViewController)中创建一个名为recordObj的记录类的对象  并通过LongPressGestureRecognizer调用函数,但它给出了错误的访问错误,我也有一些不影响这个代码的firebase代码,这也很好地制作了不同类的核心功能。

    import UIKit
    import AVFoundation
    import Firebase
    import FirebaseDatabase

    var initialState:Bool=true

    class RecordViewController: UIViewController
    {

    lazy var recordObj = Record()
    var users = [User]()

    @IBOutlet weak var bControlView: UIView!

    @IBOutlet var bRecordButton: UIButton!
    @IBOutlet weak var bCancelButton: UIButton!
    @IBOutlet weak var bSendButton: UIButton!
    @IBOutlet weak var bTimerLabel: UILabel!


    //////fuction to make blabPressed Circular/////
    func blabPressedCircularStroke()
    {
        self.bRecordButton.backgroundColor = .clear
        self.bRecordButton.layer.cornerRadius = 37
        self.bRecordButton.layer.borderWidth = 4

        self.bRecordButton.layer.borderColor = UIColor(displayP3Red: 244.0/255.0, green: 178.0/255.0, blue: 70.0/255.0, alpha: 1.0).cgColor

    }

    fileprivate func fetchBlab() {
        let blabAccountByUID=Auth.auth().currentUser?.uid
        Database.database().reference().child("Users").child(blabAccountByUID!).observe(.childAdded, with: { (snapshot) in

            if let snapshotSaved = snapshot.value as? [String: AnyObject] {

                //model being initialised
                let user = User(dictionary: snapshotSaved)
                user.name = snapshotSaved["name"] as? String
                user.number = snapshotSaved["number"] as? String
                print("fetch user accessed")
                print(snapshotSaved)

                user.UID = snapshot.key
                self.users.append(user)
                print(user.name!, user.number!)


                //this will crash because of background thread, so lets use dispatch_async to fix

                //                DispatchQueue.main.async(execute: {
                //                RecordCollectionViewController.RecordCollectionView.reloadData()
                //

                //                })
                //
            }

        }, withCancel: nil)
    }

    //VIEW DID LOAD
    override func viewDidLoad()
    {

        self.blabPressedCircularStroke()

        super.viewDidLoad()


        fetchBlab()
        recordObj.setupRecorder()
        let longPress=UILongPressGestureRecognizer(target: self, action:#selector(bRecorderPressed(press:)))
            longPress.minimumPressDuration=0
            longPress.numberOfTouchesRequired=1

        bRecordButton.addGestureRecognizer(longPress)
    }

    //status bar light
    override var preferredStatusBarStyle: UIStatusBarStyle{
        return .lightContent
    }

    //applied function on blab recorder
    func bRecorderPressed(press:UILongPressGestureRecognizer)
        {

            print("brecordbutton long pressed")

            switch press.state
            {
            case .possible:
                print("in possible")
                recordObj.setupRecorder()
            case .began:

                print(" in began"); bRecordButton.isHighlighted=true
                recordObj.record()
            case .ended:

                print(" in ended"); bRecordButton.isHighlighted=false
                recordObj.pause()
            default:
                print("long press gesture couldnt complete")
            }

        }

    }

    import Foundation
    import AVFoundation

    class Record:AVAudioRecorder, AVAudioRecorderDelegate{

    var soundRecorder : AVAudioRecorder!
    var fileName = "audioFile.m4a"
    var soundSession:AVAudioSession
    override init() {

        soundSession=AVAudioSession.sharedInstance()
        do
        {
        try soundSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
        try soundSession.setActive(true)
        }catch
        {
            let e=NSError()
            print("error loading session \(e.localizedDescription)")

        }
        super.init()
    }


    func getCacheDirectory() -> String {

        let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true) as! [String]

        return paths[0]

    }

    func getFileURL() -> URL{
        let path  = getCacheDirectory()+fileName

        let filePath = URL(fileURLWithPath: path)

        return filePath
    }


    func setupRecorder()
    {
        var recordSettings = [AVFormatIDKey : kAudioFormatAppleLossless,
                              AVEncoderAudioQualityKey : AVAudioQuality.max.rawValue,
                              AVEncoderBitRateKey : 320000,
                              AVNumberOfChannelsKey : 2,
                              AVSampleRateKey : 44100.0 ] as [String: Any]


        do
        {
            soundRecorder = try AVAudioRecorder(url: getFileURL(), settings: recordSettings )
        }
        catch
        {
            var error : NSError?
            if let err=error
            {

                NSLog("Something Wrong")
                print(err.localizedDescription)
            }

            else
            {

                soundRecorder.delegate = self
                soundRecorder.prepareToRecord()

            }       
    }
    }

}

0 个答案:

没有答案