"Application tried to present modally an active controller"?

Deparei-me com um acidente a mostrar uma mensagem numa aplicação que não estava a fazer isto antes.

a aplicação tentou apresentar modalmente um controlador activo UITabBarController: 0x83d7f00.

Tenho um {[3] } que crio no AppDelegate e dou-lhe a matriz de UIViewControllers.

Um deles quero apresentar-me modalmente quando estiver sob escuta. Fi-lo aplicando o método do delegado ([8]).
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController

Se esse controlador de visualização For da classe de aquele que eu quero apresentar modalmente, eu volto não e faço

[tabBarController presentModalViewController:viewController animated:YES];

e agora estou recebendo esse erro, o que parece significar que você não pode apresentar modalmente um controlador de vista que está ativo em outro lugar (na barra de páginas...) Devo dizer que estou no Xcode 4.2 Developer Preview 7, então este é iOS 5 (Eu sei sobre a NDA, mas eu acho que não estou dando quaisquer detalhes proibidos). Eu atualmente Não tenho uma instalação de XCode para testar se este quebra compilar contra o SDK iOS4, mas eu tenho quase inteiramente a certeza que não. Só queria perguntar se alguém passou por este problema ou tem alguma sugestão.

Author: Javier Soto, 2011-09-15

5 answers

Assume que tens três controladores de visualização instantados assim:

UIViewController* vc1 = [[UIViewController alloc] init];
UIViewController* vc2 = [[UIViewController alloc] init];
UIViewController* vc3 = [[UIViewController alloc] init];

Adicionaste - os a uma barra de tabulações como esta:

UITabBarController* tabBarController = [[UITabBarController alloc] init];
[tabBarController setViewControllers:[NSArray arrayWithObjects:vc1, vc2, vc3, nil]];
Agora estás a tentar fazer algo assim.
[tabBarController presentModalViewController:vc3];

Isto dar-lhe-á um erro porque esse controlador de barras de páginas tem um aperto de morte no controlador de vista que lhe deu. Você pode ou não adicioná-lo à lista de controladores de visualização na barra de páginas, ou você não pode apresentá-lo modalmente.

A Apple espera que trates a IU deles. elementos de uma certa forma. Isto provavelmente está enterrado nas Diretrizes de Interface Humana em algum lugar como um "não faça isso porque nós não estamos esperando que você nunca queira fazer isso".

 82
Author: lswank, 2011-09-23 19:44:09
Tenho o mesmo problema. Tento apresentar o controlador de visão logo após a demissão.
[self dismissModalViewControllerAnimated:YES];
Quando tento fazê-lo sem animação, funciona perfeitamente, por isso o problema é que o controlador ainda está vivo. Acho que a melhor solução é usar dismissViewControllerAnimated:completion: para iOS5
 11
Author: Danil, 2013-08-02 03:02:14
Tive o mesmo problema.Eu resolvo-o. Você pode tentar este código:
[tabBarController setSelectedIndex:1];
[self dismissModalViewControllerAnimated:YES];
 2
Author: Erhan Demirci, 2013-04-30 09:49:57

No meu caso, eu estava a tentar apresentar o vercontroller (tenho a referência do vercontroller no TabBarViewController) de diferentes controladores de visualização e estava a colidir com a mensagem acima. Nesse caso, para evitar a apresentação, pode utilizar

Controlador de visualização.está a ser apresentado

!viewController.isBeingPresented {
          // Present your ViewController only if its not present to the user currently.
}
Pode ajudar alguém.
 2
Author: Karthick Ramesh, 2018-07-13 03:50:06

Apenas Remover

[tabBarController presentModalViewController:viewController animated:YES];

E manter

[self dismissModalViewControllerAnimated:YES];
 0
Author: user170317, 2011-10-18 12:59:02