2015-07-20 3 views
0

В представлении, которое было создано модально, нажатие кнопки вызывает отклонение модального вида и загрузку другого модального представления.Ошибка создания модального вида с другого модального вида

- (void)loadLanguageSelectionView { 
    [self dismissViewControllerAnimated:YES completion:nil]; 
    UIViewController *languageSelectionController = [[LanguageSelectionViewController alloc] initWithNibName:nil bundle:nil]; 
    [languageSelectionController setModalPresentationStyle:UIModalPresentationCustom]; 
    [languageSelectionController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; 
    [self presentViewController:languageSelectionController animated:YES completion:nil]; 
} 

Следующая ошибка возникает, когда этот блок кода выполняется:

DenkoStation[4259:73173] Warning: Attempt to present <LanguageSelectionViewController: 0x7b185430> on <ViewController: 0x79f52e50> whose view is not in the window hierarchy! 

Что меня удивляет тот факт, что код работает счастливо, прежде чем я сделал некоторые изменения в свой код as outlined here.

Где ошибка?

+1

После отклонить контроллер представления, он больше не в иерархии , поэтому ошибка. Что делать, если вы сначала получаете презентационный контроллер представления, а затем используете его в качестве получателя при вызове 'presentViewController:'? (Не ответ, потому что я его не пробовал ... но это кажется разумным.) –

+0

Проблема заключается в том, что вы сначала отклонили 'self', используя' [self rejectViewControllerAnimated: YES complete: nil]; ', а затем вы попытались представить 'languageSelectionController' на' self'. Вот почему, если не удается. – x4h1d

+0

@PhillipMills работает. Благодарю. Если вы напишете свое решение в качестве ответа, я выберу его как правильный. –

ответ

1

Потому что вы пытаетесь представить viewController поверх viewController, который уже уволен и больше не находится в иерархии окон. не

То, что вы можете попробовать это, вы можете взять ссылку ParentViewController из текущего ViewController, а затем вы можете представить новую ViewController на ParentViewController Like This:

- (void)loadLanguageSelectionView { 
    UIViewController *parentController = self.presentingViewController; 
    [self dismissViewControllerAnimated:YES completion:^{ 
     UIViewController *languageSelectionController = [[LanguageSelectionViewController alloc] initWithNibName:nil bundle:nil]; 
     [languageSelectionController setModalPresentationStyle:UIModalPresentationCustom]; 
     [languageSelectionController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; 
     [parentController presentViewController:languageSelectionController animated:YES completion:nil]; 
    }]; 
} 
Смежные вопросы