Właśnie natknąłem się na awarię NSInvalidArgumentException
z tym komunikatem w aplikacji, która wcześniej tego nie robiła.
Aplikacja próbowała przedstawić modalnie aktywny kontroler UITabBarController: 0x83d7f00.
Mam, UITabBarController
który tworzę w AppDelegate
i daję mu tablicę UIViewControllers
.
Jeden z nich chcę zaprezentować modalnie po dotknięciu. Zrobiłem to, implementując metodę delegata
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
Jeśli ten kontroler widoku jest tej samej klasy, co ten, który chcę przedstawić modalnie, zwracam NIE i robię
[tabBarController presentModalViewController:viewController animated:YES];
A teraz otrzymuję ten błąd, co wydaje się oznaczać, że nie można modalnie zaprezentować kontrolera widoku, który jest aktywny gdzieś indziej (na pasku kart ...) Powinienem powiedzieć, że jestem na XCode 4.2 Developer Preview 7, więc to jest iOS 5 (wiem o NDA, ale myślę, że nie podaję żadnych zakazanych szczegółów). Obecnie nie mam instalacji XCode do przetestowania, czy to powoduje awarię kompilacji z SDK iOS4, ale jestem prawie całkowicie pewien, że tak się nie stanie.
Chciałem tylko zapytać, czy ktoś doświadczył tego problemu lub ma jakieś sugestie
źródło
Odpowiedzi:
Załóżmy, że masz trzy kontrolery widoku utworzone w następujący sposób:
Dodałeś je do takiego paska kart:
Teraz próbujesz zrobić coś takiego:
Spowoduje to błąd, ponieważ ten kontroler paska zakładek ma śmiertelny uścisk na kontrolerze widoku, który mu dałeś. Nie możesz dodać go do tablicy kontrolerów widoku na pasku kart lub nie możesz go przedstawić modalnie.
Apple oczekuje, że będziesz traktować ich elementy interfejsu użytkownika w określony sposób. Jest to prawdopodobnie zakopane w Wytycznych dotyczących interfejsu ludzkiego jako „nie rób tego, ponieważ nie oczekujemy, że kiedykolwiek będziesz chciał to zrobić”.
źródło
Mam ten sam problem. Próbuję przedstawić kontroler widoku zaraz po zamknięciu.
Kiedy próbuję to zrobić bez animacji, działa idealnie, więc problem polega na tym, że kontroler wciąż żyje. Myślę, że najlepszym rozwiązaniem jest użycie
dismissViewControllerAnimated:completion:
na iOS5źródło
W moim przypadku próbowałem przedstawić ViewController (mam odniesienie do viewController w TabBarViewController) z różnych kontrolerów widoku i zawieszał się z powyższym komunikatem. W takim przypadku, aby uniknąć prezentacji, możesz użyć
Może komuś pomóc.
źródło
Miałem ten sam problem, rozwiązuję go. Możesz wypróbować ten kod:
źródło
Ten sam problem wystąpił ze mną, gdy próbowałem
present
użyć kontrolera widoku podrzędnego zamiast jegoUINavigationViewController
rodzicaźródło
Po prostu usuń
i zachowaj
źródło
Zamiast używać:
możesz użyć:
źródło
W moim przypadku przedstawiałem
rootViewController
to,UINavigationController
kiedy miałem przedstawićUINavigationController
siebie.źródło