2

我无法使用 Apple 的SpeakHere示例应用程序录制音频。当我在 Xcode 中的 Simulator 中运行应用程序时,它可以正常启动,但是当我按下录制按钮时,会出现错误“线程 1:EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)”:出现问题后的截图

在发生上述错误之前,关于应用程序启动时缺少根视图控制器的日志消息已经存在,并且可能与我的问题无关。

我已经从链接的网站下载了 SpeakHere 示例项目(请参阅此问题的顶部),在 Xcode 中打开全新下载并直接启动应用程序。我没有修改任何设置,也没有修改任何代码行。我也在google和stackoverflow上搜索过这个问题,没有找到解决方案,虽然这个问题一定很笼统。

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

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

我现在会尝试较旧的 Xcode 版本,但现在我不喜欢下载几 GB 以在我的连接上进行试错法。

任何帮助表示赞赏,包括“适用于我的 Xcode 版本......”之类的报告。谢谢!

4

2 回答 2

17

出现问题是因为在 methodAQRecorder::StartRecord(CFStringRef inRecordFile)中,函数CFURLCreateWithString()失败并返回一个指向 nil 的指针。这没有被检测到,后来代码调用CFRelease()了这个 nil 指针,这导致了 EXC_BREAKPOINT。

该方法的目的CFURLCreateWithString()基本上是将 url 字符串作为输入并返回指向 CFURL 对象的指针作为输出。这里的问题是输入不是 url 字符串。相反,它只是本地文件系统上的路径,没有file:/或类似的前缀。因此,此方法失败。

解决方法是去掉对方法的无效调用CFURLCreateWithString(),转而调用相关方法,即CFURLCreateWithFileSystemPath()准备取本地文件系统路径并将其转换为 CFURL 的方法:

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

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

并插入

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

在它的位置。

于 2012-11-29T16:45:06.643 回答
0
url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (CFStringRef)recordFile, kCFURLPOSIXPathStyle, false);

上面的代码使我的 xcoce 4.6 在模拟器中编译和运行,但它没有从我的 USB 麦克风录制我的声音,我在 garash band 应用程序中测试我的麦克风并成功录制和播放我的声音,dbmeter 根本不动,无论如何,当我将它移植到它工作的真实设备时,它都无法在我的模拟器中录制和播放语音。

于 2013-02-05T02:06:03.470 回答