2012-07-24 2 views
0

내 Mac 응용 프로그램에서 AVAudioRecorder를 사용하고 있습니다.AVAudioRecorder가 유지되지 않습니다.

audioRecorder = [[[AVAudioRecorder alloc] initWithURL:soundFileURL settings:recorderSettings error:&error] retain]; 
... 
[audioRecorder prepareToRecord]; 
... 
[audioRecorder record]; 

내가 파일이 작성되는 것을 볼 수 있지만, 그것은 단지 4킬로바이트이 있습니다 내하는 .m 파일에서 나는 다음과 같이 객체 init을 ALLOC 더 아래

@interface RecordViewController() 
{ 
    AVAudioRecorder *audioRecorder; 
... 
} 
@end 

을 선언합니다. 나는 오류를 얻지 않지만, 내가 시험 할 때 [audioRecorder isRecording]이 [audioRecorder가 더 이상 녹음하지 않는다는 것을 알 수 있습니다. ARC를 사용하지 않고 dealloc 메서드가 호출되지 않았더라도 개체가 릴리스되었다고 가정합니다.

나는 AVAudioPlayer와 비슷한 문제가 있었지만 alloc init에 추가 된 retain]이 추가되었습니다.

내가 뭘 잘못하고 있니?

감사

UPDATE 1 : I 심지어 (모두 동일한 방법으로) 다음을 수행하도록 시도

:

[audioRecorder record]; 
NSLog(@"recording is ... %d", [audioRecorder isRecording]); 

그 결과가 0 이다 ?? ?

self을 사용해야합니까? 또는 audioRecorder을 지연 설치 하시겠습니까?

업데이트 2 : 내가 프로젝트를 다시는 - TEST를 불러 내 ​​기존 프로젝트에서 소스 코드를 복사. 이제 작동합니까?!?! 그림을 이동. 소스 코드는 같은 줄에 대한 줄입니다. 이 문제는 Xcode와 관련하여 알려진 문제입니까?

+0

보유 횟수를 확인하기 위해 프로그램에서 좀비를 실행 했습니까? 'audioRecorder'가 할당 해제되면'isRecording'을 호출하면 잘못된 액세스 오류가 발생하는 것처럼 보입니다. – Dustin

+0

인스 트루먼 트에서 실행하면 NSZombie가 생성되지 않습니다. 나는 isRecording을 호출 할 때 오류 또는 잘못된 액세스 호출을받지 않습니다. – Joseph

답변

1

먼저보고하십시오.

녹음을 성공적으로 수행했거나 오류가 발생하는 경우 AVAudioRecorder에서 대리자 (AVAudioRecorderDelegate)를 사용하여 로그에 대리자를 사용하려고 했습니까?

특히 audioRecorderEncodeErrorDidOccur:error: 메서드는 녹음하는 동안 오류가 발생합니다.

새로 추가 retain]은 부울 allocinit의 소유권을 소유하고 있으므로 릴리스해야하므로 필요하지 않습니다.

+0

해당 델리게이트 메소드를 구현했거나 가지고 있지 않으면 오류가 기록되지 않습니다. AVAudioPlayer 객체는 내가하지 않으면 보존되지 않을 것임을 알았 기 때문에 보존 만 추가했습니다. 그것은 1 초 동안 재생을 시작한 다음 중단합니다. 'retain '을 추가하면 정상적으로 재생됩니다. 나는 심지어 편집증이되어 컴파일러 플래그'-fno-objc-arc'을 추가하여 ARC가 실제로 활성화되지 않도록합니다. – Joseph

+0

필자도'- (void) audioRecorderDidFinishRecording : (AVAudioRecorder *) recorder successfully : (BOOL) flag'을 구현했으며 결코 호출되지 않습니다. – Joseph

+0

해명을위한 한 가지 더. NSLog에서'[audioRecorder isRecording] '을 호출하면 결과적으로'0'이됩니다. 그러나 오류는 발생하지 않습니다. – Joseph

0

그것은 당신이 그것을 해제하지 않는 한 ALLOC 때문에, 발표 및 초기화하고 공개하지 않습니다. (그것은 또한 오토 릴리즈 아닙니다.) ARC가 활성화되어있는 경우

, 그것은 강력해야 할 수 없습니다. 여전히 인스턴스 개체가 할당 해제되지 않음을 의미합니다 액세스 할 수 있는지

은, 당신의 의견에 따라, 모든 http://chinki-singh.blogspot.com/2011/07/how-to-record-audio-using.html

+0

'[audioRecorder release]를 호출하는 유일한 시간은'dealloc' 메쏘드에 있는데, 이것은 호출되지 않습니다. (확실히 NSLog가 있습니다). 앞서 언급했듯이 ARC가 점검되지 않은 프로젝트를 만들었습니다. – Joseph

+0

Ivars는 기본적으로'__strong'입니다. –

관련 문제