AudioFileOpenURL возвращает -43 для существующего файла

У меня есть шаг в моем приложении, когда пользователь неоднократно слышит три произнесенные цифры.

Если я оставлю этот шаг на некоторое время (для некоторых неопределенных значений «пока»), мои журналы отладки покажут это (удалены нерелевантные записи журнала):

2010-03-01 13:44:21.283 iPhoneHearChk[1236:207] AudioFileOpenURL returned 0
 (for <file://localhost/var/mobile/Applications/3A28F975-EAD5-4A5B-AFE6-FA1C6EE95732/iPhoneHearChk.app/5b3.ima4>)
2010-03-01 13:44:35.493 iPhoneHearChk[1236:207] AudioFileOpenURL returned 0
 (for <file://localhost/var/mobile/Applications/3A28F975-EAD5-4A5B-AFE6-FA1C6EE95732/iPhoneHearChk.app/5b3.ima4>)
2010-03-01 13:45:17.916 iPhoneHearChk[1236:207] AudioFileOpenURL returned 0
 (for <file://localhost/var/mobile/Applications/3A28F975-EAD5-4A5B-AFE6-FA1C6EE95732/iPhoneHearChk.app/5b3.ima4>)
2010-03-01 13:47:00.408 iPhoneHearChk[1236:207] AudioFileOpenURL returned -43
 (for <file://localhost/var/mobile/Applications/3A28F975-EAD5-4A5B-AFE6-FA1C6EE95732/iPhoneHearChk.app/5b3.ima4>)

Из того, что я прочитал, MacErrors.h определяет -43 как fnErr, файл не найден. Но очевидно, что файл действительно существует, потому что я уже успешно открывал его раньше. Что дает?

Как я открываю файл:

NSString *soundFilePath = [[NSBundle mainBundle] pathForResource: name ofType: type];
if (!soundFilePath) { NSLog(@"No path found for sound file %@.%@", name, type); }
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath];
rc = AudioFileOpenURL((CFURLRef) fileURL, kAudioFileReadPermission, 0, &file);

где файл — это параметр AudioFileID, а имя и тип — параметры NSString *.


person Frank Shearar    schedule 01.03.2010    source источник


Ответы (1)


Возможно ли, что у вас закончились дескрипторы файлов? Вы закрываете открытые файлы после того, как закончили с ними работать?

person Kristopher Johnson    schedule 01.03.2010
comment
Я проверял, но перепроверю. Конечно, вызов AudioFileClose() находится в методе Dealloc, но я проверю, что нужный объект действительно освобождается. - person Frank Shearar; 01.03.2010
comment
Действительно, объект, содержащий NSMutableArray, содержащий объекты, открывающие файлы, освобождает массив, но не элементы В массиве. Таким образом, ни один из объектов, вызываемых AudioFileClose(). Спасибо! - person Frank Shearar; 01.03.2010