AVAudioPlayer возвращает ноль в случайном порядке - PullRequest
0 голосов
/ 25 октября 2011

В моем коде есть следующие строки:

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, который я использую примерно от 10 до 30 раз в одном ViewController.

Все работает отлично в первые несколько раз, когда ViewControllers инициализируется и загружается.Но после переключения ViewControllers через некоторое время мое приложение вылетает, потому что следующая строка (которая работала все время до этого) сейчас возвращает ноль.

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

Я проверил, равны ли soundPath или soundURL_ нулю.Но они в порядке.Точно такое же значение, как и во все времена, когда оно работало.

Так что теперь я спрашиваю себя, как это может случиться, что оно работает много раз, а потом возвращает ноль?В том же приложении, не закрывая и не запуская его снова.И все, что я делаю, это переключение между viewControllers.Сначала я подумал, что это проблема с памятью, но я не получаю никаких предупреждений о памяти.

Я действительно понятия не имею, почему это происходит.

Любая помощь будет принята с благодарностью.Спасибо заранее, Маверик.

-------- Редактировать --------

Теперь я обнаружил, что получаю следующую ошибку:

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 как кэш изображений, который очищается при возникновении проблем с памятью.Есть ли другой вариант для меня, чтобы закрыть мои файловые дескрипторы?

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

ПОПРОБУЙТЕ,

NSString * URL = [YOUR_URL stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];

0 голосов
/ 25 октября 2011

Из-за ошибки кажется, что вы открыли много файлов и забыли закрыть их.Вы выпускаете файловые объекты, когда вы закончите?С какими файлами вы работаете?

...