ios – swift2 AVAudioRecorder

我正在使用 swift 2尝试以下代码,在 swift 1中应该没问题.

class NewSoundViewController: UIViewController {
required init(coder aDecoder: NSCoder) {
    let audioURL = NSURL.fileURLWithPathComponents([
        NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask,true)[0],"MyAudio.m4a"
    ])
    do {
        let session = AVAudioSession.sharedInstance()
        try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
    } catch {
        print("Session errors.")
    }

    do {
        let recordSettings: [String: AnyObject] = [
            AVFormatIDKey: kAudioFormatMPEG4AAC,AVSampleRateKey: 44100.0,AVNumberOfChannelsKey: 2,]
        self.audioRecorder = try AVAudioRecorder(URL: audioURL!,settings: recordSettings)
        self.audioRecorder.meteringEnabled = true
        self.audioRecorder.preparetoRecord()

    } catch let error as NSError{
        print(error.description)
    } catch {
        print("Other errors")            
    }
    super.init(coder: aDecoder)
}

我有编译错误

类型’AudioFormatID’不符合协议’AnyObject’

在AVFormatIDKey行:kAudioFormatMPEG4AAC,.

如果我注释掉该行,我通过了构建,但是遇到了运行时错误

错误域= NSOsstatusErrorDomain代码= 1718449215“操作无法完成.(Osstatus错误1718449215.)”

我还尝试了AVFormatIDKey:NSNumber(unsignedInt:kAudioFormatMPEG4AAC),并且遇到了运行时错误. Xcode似乎进入调试模式它红色突出显示self.audioRecorder =尝试AVAudioRecorder(URL:audioURL!,settings:recordSettings)并表示

线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x0)

谁能帮帮我吗?

解决方法

I also tried AVFormatIDKey: NSNumber(unsignedInt: kAudioFormatMPEG4AAC)

嗯,这是正确的说法.基本上你在这里问两个问题;您已经解决的编译器错误.现在你遇到了运行时错误,但那是完全不同的事情.

至于运行时错误,它可能只是试图在模拟器上进行测试.我在设备上运行了你的代码(修复了有问题的行以便编译),这很好.

编辑在评论中,您透露您是在运行iOS 8.3的设备上测试过的.那就是问题所在!您需要在设备上进行测试,它需要是运行iOS 9的设备.然后您会发现您的代码运行时没有崩溃.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...