iPhone crashing when presenting modal view controller

Viewed 27278

I'm trying to display a modal view straight after another view has been presented modally (the second is a loading view that appears).

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    // Show load
    LoadViewController *loader = [[LoadViewController alloc] init];
    [self presentModalViewController: loader animated:NO];
    [loader release];
}

But when I do this I get a "Program received signal: "EXC_BAD_ACCESS"." error.

The stack trace is:

0  0x30b43234 in -[UIWindowController transitionViewDidComplete:fromView:toView:]
1  0x3095828e in -[UITransitionView notifyDidCompleteTransition:]
2  0x3091af0d in -[UIViewAnimationState sendDelegateAnimationDidStop:finished:]
3  0x3091ad7c in -[UIViewAnimationState animationDidStop:finished:]
4  0x0051e331 in run_animation_callbacks
5  0x0051e109 in CA::timer_callback
6  0x302454a0 in CFRunLoopRunSpecific
7  0x30244628 in CFRunLoopRunInMode
8  0x32044c31 in GSEventRunModal
9  0x32044cf6 in GSEventRun
10 0x309021ee in UIApplicationMain
11 0x00002154 in main at main.m:14

Any ideas? I'm totally stumped! The loading view is empty so there's definitely nothing going on in there that's causing the error. Is it something to do with launching 2 views modally in the same event loop or something?

Thanks,

Mike

Edit: Very strange... I have modified it slightly so that the loading view is shown after a tiny delay, and this works fine! So it appears to be something within the same event loop!

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    // Show load
    [self performSelector:@selector(doit) withObject:nil afterDelay:0.1];
}

- (void)doit {
    [self presentModalViewController:loader animated:YES];  
}
16 Answers

It's possible if you're getting this after clicking a button which was linked to your code in Interface Builder, that you've got two actions linked to one button (maybe if you had a modal view linked to a button, then duplicated the button and linked another modal view). This will try to fire them both off and therefore it'll fail with that message.

I think this issue has something to do with a problem that I also encountered. It is very easy to reproduce:

Create new XCode Project "Utility Application". In the FlipsideViewController.m you just insert the following method:

- (void)viewDidAppear:(BOOL)animated {
  [super viewDidAppear: animated];
  [self showInfo];
}

If you do this, start the application, then the flipside-view will be activated right away. As soon as you press the "Done" Button on the flipside-view, you will get back to the Mainview which fires viewDidAppear again and goes right back to the flipside- view. As soon as the flipside-view is displayed, the application stops - no memory deallocators are called - it is just like you have pressed the home-button.

When I was using some additional properties in those views, I also got the exception, so I stripped down the code to the minimum amount...

I really have no clue, what this problem really is...

Best regards, Tobias

I had a similar error when clicking on a UIButton to open a Modal View. I changed the UIButton's listener from UIControlEventAllEvents to UIControlEventTouchUpInside. Basically, it was firing the Modal View on Touch Down Inside and then again on Touch Up Inside.

Related