在Simulator / Xcode中录制audio时,Fresh SpeakHere示例应用程序出错

我无法使用苹果的SpeakHere示例应用程序录制audio。 当我在Xcode中的模拟器中运行应用程序时,它正常启动,但是当我按下loggingbutton时,会出现错误“线程1:EXC_BREAKPOINT(code = EXC_I386_BPT,subcode = 0x0)”: 问题发生后的截图

在应用程序启动时关于丢失的根视图控制器的日志消息已经在那里之前发生上述错误,它可能没有连接到我的问题。

我已经从链接网站下载了SpeakHere示例项目(请参阅此问题的顶部),在Xcode中打开新下载并直接启动应用程序。 我没有修改任何设置,也没有修改任何代码。 我也search了谷歌和stackoverflow这个问题,并没有find解决办法,虽然这个问题一定是非常普遍的。

我使用Mac OS X 10.8的Xcode版本4.5.2(4G2008a)和2009年末的MacBook Pro。

我也有一个朋友在他的电脑上试试这个,他也有同样的问题。 他有相同的操作系统,他的XCode版本也是4.5.2。

我现在会尝试旧的Xcode版本,但现在我不喜欢在我的连接上下载几千兆字节的trial.n'error方法。

任何帮助表示赞赏,包括像“用Xcode版本为我工作…”。 谢谢!

因为在方法AQRecorder::StartRecord(CFStringRef inRecordFile) ,函数CFURLCreateWithString()失败,并返回一个指向nil的指针。 这不会被检测到,稍后代码会在这个零指针上调用CFRelease() ,这会导致EXC_BREAKPOINT。

CFURLCreateWithString()方法的目的基本上是将urlstring作为input,并返回一个指向CFURL对象的指针作为输出。 这里的问题是,input不是一个urlstring。 相反,它只是本地文件系统上的一个path,没有file:/或类似的前缀。 为此,此方法失败。

解决方法是删除对CFURLCreateWithString()方法的非工作调用,而是调用一个相关的方法,即CFURLCreateWithFileSystemPath() ,该方法准备采用本地文件系统path并将其转换为CFURL:

在方法AQRecorder::StartRecord(CFStringRef inRecordFile) ,replace或注释掉该行

 url = CFURLCreateWithString(kCFAllocatorDefault, (CFStringRef)recordFile, NULL); 

并插入

 url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (CFStringRef)recordFile, kCFURLPOSIXPathStyle, false); 

在它的地方。

 url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (CFStringRef)recordFile, kCFURLPOSIXPathStyle, false); 

上面的代码使得我的xcoce 4.6编译并运行在模拟器中,但是它没有logging我的usb麦克风的声音,我在garash乐队应用程序中testing了我的麦克风,并成功录制和播放我的声音,而dbmeter根本不动,任何方式,当我把它移植到真正的设备,它只是无法录制和播放我的模拟器中的声音。