Acabei de encontrar um travamento mostrando um NSInvalidArgumentException
com esta mensagem em um aplicativo que não estava fazendo isso antes.
O aplicativo tentou apresentar modalmente um controlador ativo UITabBarController: 0x83d7f00.
Eu tenho um UITabBarController
que eu crio no AppDelegate
e dou a ele o array de UIViewControllers
.
Desejo apresentar um deles de forma modal ao tocar nele. Eu fiz isso implementando o método delegado
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
Se esse controlador de visualização for da classe que desejo apresentar modalmente, retorno NÃO e faço
[tabBarController presentModalViewController:viewController animated:YES];
E agora estou recebendo aquele erro, o que parece significar que você não pode apresentar modalmente um controlador de visualização que esteja ativo em outro lugar (na barra de guias ...). Devo dizer que estou no XCode 4.2 Developer Preview 7, então este é o iOS 5 (eu sei sobre o NDA, mas acho que não estou dando detalhes proibidos). Atualmente, não tenho uma instalação do XCode para testar se a compilação do iOS4 SDK trava, mas tenho quase certeza de que não.
Eu só queria perguntar se alguém passou por esse problema ou tem alguma sugestão
fonte
Respostas:
Suponha que você tenha três controladores de visualização instanciados assim:
Você os adicionou a uma barra de guias como esta:
Agora você está tentando fazer algo assim:
Isso gerará um erro porque o Tab Bar Controller tem um controle mortal sobre o controlador de visualização que você forneceu. Você não pode adicioná-lo ao conjunto de controladores de visualização na barra de guias ou não pode apresentá-lo modalmente.
A Apple espera que você trate seus elementos de interface do usuário de uma determinada maneira. Isso provavelmente está enterrado nas Diretrizes de Interface Humana em algum lugar como um "não faça isso porque não esperamos que você queira fazer isso".
fonte
Eu tenho o mesmo problema. Tento apresentar o controlador de exibição logo após dispensar.
Quando tento fazer sem animação, funciona perfeitamente, então o problema é que o controlador ainda está vivo. Eu acho que a melhor solução é usar
dismissViewControllerAnimated:completion:
para iOS5fonte
No meu caso, eu estava tentando apresentar o viewController (tenho a referência do viewController no TabBarViewController) de diferentes controladores de visualização e estava travando com a mensagem acima. Nesse caso, para evitar a apresentação, você pode usar
Pode ajudar alguém.
fonte
Eu tive o mesmo problema. Eu resolvo. Você pode tentar este código:
fonte
O mesmo erro de problema aconteceu comigo quando tentei
present
um controlador de visualização filho em vez de seuUINavigationViewController
paifonte
Apenas remova
e mantenha
fonte
Ao invés de usar:
você pode usar:
fonte
No meu caso, eu estava apresentando o
rootViewController
de umUINavigationController
quando deveria apresentar oUINavigationController
próprio.fonte