dismissModalViewControllerAnimated: (и dismissViewControllerAnimated) сбой в iOS 5

Я не могу найти никакого логического объяснения, но факт остается фактом: в iOS 5 (xCode 4.2), если я представлю ModalView: * animated: ДА , Я могу вызвать dismissModalViewAnimated: * нормально, но если я вызову presentModalView: * animated: NO, тогда вызов метода dismiss завершится аварийно. (Это работает так же, если я использую новый PresentViewController: animated: completion: + dismissViewControllerAnimated :). Я собираюсь ПОПРОБОВАТЬ, чтобы обойти это сейчас (я не хочу, чтобы презентация была анимированной) и сообщила об ошибке в Apple, но я уже давно ломаю голову над этим. Любые предложения приветствуются. В iOS 5 не так много возможностей, поэтому, пожалуйста, помогите, если сможете. Пример кода, который не дает сбоев в iOS 4 или iOS 5:

LoginController *loginController = [[LoginController alloc] initWithNibName:@"LoginControllerGG" bundle:nil];
[self presentModalViewController:loginController animated:YES];
[loginController release];
...
[self dismissModalViewControllerAnimated:YES];

Это приведет к сбою в iOS 5 с EXC_BAD_ACCESS при вызове отклонения:

LoginController *loginController = [[LoginController alloc]    initWithNibName:@"LoginControllerGG" bundle:nil];
[self presentModalViewController:loginController animated:NO];
[loginController release];
...
[self dismissModalViewControllerAnimated:YES]; //crashes with EXC_BAD _ACCESS

Одно примечание: у меня есть анимация в loginController, которая происходит при viewDidLoad. Посмотрим, изменит ли это что-нибудь, но я хотел выпустить это, так как мне нужно решение как можно скорее.


[Edit] Полный поток кода ... В AppDelegate приложение: didFinishLaunchingWithOptions:

if (!loggedIn)  [myViewController showLoginPanel];

В myViewController :

- (void)showLoginPanel {    
    LoginController *loginController = [[LoginController alloc] initWithNibName:@"LoginControllerGG" bundle:nil];
    if ([self respondsToSelector:@selector(presentViewController:animated:completion:)]) {
        [self presentViewController:loginController animated:NO completion:nil];
    } else {
        [self presentModalViewController:loginController animated:NO]; //iOS 4 works fine with or without animation   
    } 
    [loginController release];  
}

В loginController:

- (IBAction)closeLoginWindow {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"CloseLoginWindow" object:nil];
}   //doing it this way because calling on the self.parentViewController doesn't work

Вернуться в myViewController:

- (void) viewDidLoad
    ...
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(closeLoginWindow) name:@"CloseLoginWindow" object:nil];
    ...

- (void)closeLoginWindow {
    if ([self respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]) {
        [self dismissViewControllerAnimated:YES completion:nil];    //iOS 5 crashes only if presentation was not animated
    } else [self dismissModalViewControllerAnimated:YES];    //deleting the previous condition, iOS 5 still crashes if presentation was not animated
}    
9
задан jbcaveman 19 October 2011 в 05:55
поделиться