根据Apple的SpeakHere音频应用示例,我在iPad上编写了一个小型录音机/播放器。当用户要求显示录像机时,UIView会打开并显示录制/停止按钮和仪表。
当我从头开始加载应用程序时,我可以记录,停止记录,再次记录我想要的任何时间。停止录制后,我将应用程序放在后台,例如阅读我的邮件。再次将录音机置于前台时,无法录制任何声音。我在日志中收到错误消息,仪表不显示任何数据,也没有创建声音文件。我注意到与iPhone和iPad上的SpeakHere示例应用程序相同的行为。唯一的解决方案是退出并重新启动应用程序。
为了解决这个问题,我决定在用户使用完记录器后取消分配视图控制器。我为记录视图控制器禁用了ARC,并编写了dealloc方法。在这个控制器的viewDidDisappear中,我放了一个 [self dealloc] 调用。
但程序崩溃,发送 [RecorderViewController childViewControllersCount]:发送到解除分配的实例的消息。我想不允许这种自我谴责......
我需要找到解决方案,或者......
找到一种在应用程序进入后台时正确管理音频会话的方法(因为录制停止,我不明白为什么会出现这样的问题)。
或者在视图关闭时正确释放录像机视图控制器,以确保在视图必须出现的任何时候,它都会从控制器的XIB文件中再次加载。
[更新] 在查看aurioTouch应用程序的代码(Apple dev网站的另一个音频示例)之后,我在应用程序委托中找到了以下代码:
- (void)applicationDidBecomeActive:(UIApplication *)application
{
AudioSessionSetActive(true);
}
它可以在我的应用程序或SpeakHere应用程序中运行...花了很多时间找到解决方法,这是一行代码!