Я только что обнаружил сбой NSInvalidArgumentException
с этим сообщением в приложении, которое раньше этого не делало.
Приложение попыталось модально представить активный контроллер UITabBarController: 0x83d7f00.
У меня есть объект, UITabBarController
который я создаю в, AppDelegate
и передаю ему массив UIViewControllers
.
Один из них я хочу представить модально при нажатии на него. Я сделал это, реализовав метод делегата
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
Если этот контроллер представления относится к классу того, который я хочу представить модально, я возвращаю NO и делаю
[tabBarController presentModalViewController:viewController animated:YES];
И теперь я получаю эту ошибку, которая, кажется, означает, что вы не можете модально представить контроллер представления, который активен где-то еще (на панели вкладок ...). Я должен сказать, что я использую XCode 4.2 Developer Preview 7, поэтому это iOS 5 (я знаю о соглашении о неразглашении информации, но думаю, что не буду приводить никаких запрещенных подробностей). В настоящее время у меня нет установки XCode, чтобы проверить, вызывает ли сбой компиляция iOS4 SDK, но я почти полностью уверен, что это не так.
Я только хотел спросить, сталкивался ли кто-нибудь с этой проблемой или есть какие-либо предложения
источник
Ответы:
Предположим, у вас есть три экземпляра контроллера представления, созданные следующим образом:
Вы добавили их на панель вкладок следующим образом:
Теперь вы пытаетесь сделать что-то вроде этого:
Это приведет к ошибке, потому что у этого контроллера панели вкладок есть смертельная хватка на контроллере представления, который вы ему дали. Вы можете либо не добавлять его в массив контроллеров представления на панели вкладок, либо не можете представить его модально.
Apple ожидает, что вы будете относиться к их элементам пользовательского интерфейса определенным образом. Это, вероятно, похоронено где-то в Руководстве по человеческому интерфейсу как «не делайте этого, потому что мы не ожидаем, что вы когда-нибудь захотите это сделать».
источник
У меня та же проблема. Я пытаюсь представить контроллер представления сразу после увольнения.
Когда я пытаюсь сделать это без анимации, он работает отлично, поэтому проблема в том, что контроллер все еще жив. Думаю, что лучшее решение - использовать
dismissViewControllerAnimated:completion:
для iOS5источник
В моем случае я пытался представить viewController (у меня есть ссылка на viewController в TabBarViewController) из разных контроллеров представления, и он давал сбой с указанным выше сообщением. В этом случае, чтобы избежать презентации, вы можете использовать
Может кому-нибудь помочь.
источник
У меня была такая же проблема, я ее решаю. Вы можете попробовать этот код:
источник
Та же проблема возникла со мной, когда я попытался
present
использовать дочерний контроллер представления вместо егоUINavigationViewController
родительскогоисточник
Просто удали
и хранить
источник
Вместо того, чтобы использовать:
ты можешь использовать:
источник
В моем случае я представлял
rootViewController
объект,UINavigationController
когда я должен был представить егоUINavigationController
.источник