2010-03-01 40 views
1

我的應用程序中有一個步驟,用戶重複聽三個說出的數字。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,File Not Found。但顯然文件確實存在,因爲我之前已經成功打開它。是什麼賦予了?

如何打開文件:

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 instvar和名稱和類型的NSString *參數。

回答

3

是否有可能您的文件句柄用完了?你在完成它們之後關閉你打開的文件嗎?

+0

我檢查過了,但我會重新檢查。當然,對AudioFileClose()的調用在dealloc方法中,但我會檢查必要的對象是否被釋放。 –

+0

事實上,一個持有NSMutableArray的對象持有打開文件的對象釋放數組,而不是數組中的項。因此,沒有一個對象叫做AudioFileClose()。謝謝! –