AVAudioPlayer随机返回nil



我的代码中有以下几行:

NSString *soundPath = [[NSBundle mainBundle] pathForResource:[[soundString componentsSeparatedByString:@"."]objectAtIndex:0] ofType:@"wav"];
NSURL *soundURL_ = [NSURL fileURLWithPath:soundPath];
av_player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL_ error:nil];

这些行属于一个叫做AnimatableObject的类,我在一个ViewController中使用了大约10到30次。

ViewControllers初始化和加载的前几次,它都工作得很好。但是在切换ViewControllers一段时间后,我的应用程序崩溃了,因为下面的行(以前一直工作)现在返回nil。

av_player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL_ error:nil];

我检查了soundPath或soundURL_是否为nil。但他们还好。

那么现在我问我自己,为什么会发生,它工作了很多次,然后返回nil?在同一个应用程序中,无需关闭并重新启动它。我所做的就是在viewcontroller之间切换。我首先认为这是一个内存问题,但我没有得到任何内存警告。

我真的不知道为什么会发生这种事。

任何帮助都会很感激。提前谢谢,特立独行的。

——编辑 --------

我现在发现我得到以下错误:

ImageIO: CGImageRead_mapData 'open' failed '/var/mobile/Applications/F3186E1A-BBC2-47A6-8EF6-90F73C9BD566/huckla_zoo.app/Weiter.png'
error = 24 (Too many open files)

所以我意识到我不能打开一个声音文件时,我得到这个错误。我现在唯一想知道的是:如何关闭文件句柄?我不通过[UIImage imageNamed:]加载图像而是使用

[UIImage imageWithContentsOfFile:filename];

我还实现了一个MutableDictionary作为图像缓存得到清空,当内存问题发生。还有其他选项可以让我关闭文件句柄吗?

TRY THIS,

NSString* URL = [YOUR_URL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

从错误中,听起来您打开了很多文件,却忘记关闭它们。完成后是否释放文件对象?你要处理多少文件?

相关内容

  • 没有找到相关文章

最新更新