我的代码中有以下几行:
NSString *soundPath = [[NSBundle mainBundle] pathForResource:[[soundString componentsSeparatedByString:@"."]objectAtIndex:0] ofType:@"wav"];
NSURL *soundURL_ = [NSURL fileURLWithPath:soundPath];
av_player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL_ error:nil];
这些行在calles AnimatableObject
类中,我在一个ViewController
中使用了大约10到30次。
在ViewControllers
初始化和加载的前几次完全正常工作。但是在切换ViewControllers
一段时间之后我的应用程序崩溃了,因为以下行(之前一直都有效)现在返回nil。
av_player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL_ error:nil];
我检查了soundPath或soundURL_是否为零。但他们还可以。完全相同的价值就像它工作之前的所有时间一样。
所以现在我问自己它是如何发生的,它可以工作很多次而不是返回零? 在同一个应用程序中,无需关闭并再次启动它。我所做的就是在viewControllers之间切换。 我首先认为这是一个内存问题,但我没有得到任何内存警告。
我真的不知道为什么会这样。
任何帮助将不胜感激。 Thx提前, 特立独行。
-------- --------编辑
我现在发现我收到以下错误:
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作为图像缓存,当发生内存问题时,它会被清空。 我还有其他选择来关闭文件句柄吗?
答案 0 :(得分:2)
尝试这个,
NSString * URL = [YOUR_URL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
答案 1 :(得分:0)
从错误中,听起来你已经打开了很多文件,忘了关闭它们。你完成后是在发布文件对象吗?你使用了多少个文件?