Manuel
Manuel

Reputation: 10303

Error using AVAudioRecorder

I'm making this voice recording app, but for some reason it won't let me use this delete method without crashing:

-(void)deleteCurrentFiles {
    if(recorder != nil) {
        if([recorder isRecording]) {
            [recorder stop];
        }
        [recorder release];
        recorder = nil;
        [self performSelector:@selector(resetTotalTimeLabel) withObject:nil afterDelay:1.0];
    }

    if(player != nil) {
        if([player isPlaying]) {
            [player stop];
        }
        [player release];
        player = nil;
        currentTime = 0;
        timeSlider.value = 0;
        [self performSelector:@selector(resetCurrentTimeLabel) withObject:nil afterDelay:0.1];
    }

    if(commentRecorder != nil) {
        if([commentRecorder isRecording]) {
            [commentRecorder stop];
        }
    }
}

The declarations of these instances:

AVAudioRecorder *recorder;
AVAudioRecorder *commentRecorder;
AVAudioPlayer *player;

In resetTotalTimeLabel and resetCurrentTimeLabel there is no referance to / usage of the recorders/player.

The error I get is:

-[__NSArrayI finishedRecording]: unrecognized selector sent to instance 0x1b3ba0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI finishedRecording]: unrecognized selector sent to instance 0x1b3ba0'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x35f08c7b __exceptionPreprocess + 114
    1   libobjc.A.dylib                     0x30186ee8 objc_exception_throw + 40
    2   CoreFoundation                      0x35f0a3e3 -[NSObject(NSObject) doesNotRecognizeSelector:] + 98
    3   CoreFoundation                      0x35eaf467 ___forwarding___ + 506
    4   CoreFoundation                      0x35eaf220 _CF_forwarding_prep_0 + 48
    5   CoreFoundation                      0x35ea3f79 -[NSObject(NSObject) performSelector:withObject:] + 24
    6   Foundation                          0x33fd3e6d __NSThreadPerformPerform + 272
    7   CoreFoundation                      0x35ebc8d1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 14
    8   CoreFoundation                      0x35e8cecd __CFRunLoopDoSources0 + 384
    9   CoreFoundation                      0x35e8c6f9 __CFRunLoopRun + 264
    10  CoreFoundation                      0x35e8c50b CFRunLoopRunSpecific + 226
    11  CoreFoundation                      0x35e8c419 CFRunLoopRunInMode + 60
    12  GraphicsServices                    0x35261d24 GSEventRunModal + 196
    13  UIKit                               0x3386557c -[UIApplication _run] + 588
    14  UIKit                               0x33862558 UIApplicationMain + 972
    15  App Name                            0x00002959 main + 80
    16  App Name                            0x00002904 start + 40
)
terminate called after throwing an instance of 'NSException'

It actually seems to happen to the recorder after this method is called.. So is there anything I should add to this method to make it work?

Any thoughts are greatly appriciated!

Upvotes: 0

Views: 732

Answers (1)

justin
justin

Reputation: 104698

sending a message to an object which does not respond to it at a strange point in time is a good indication of a reference count imbalance. run your app with zombies enabled in Instruments. reproduce the crash and see if it is a zombie.

Upvotes: 1

Related Questions