1

我似乎有一个很奇怪的问题。我的应用程序有一个UITabBar,它可以让你选择各种视图控制器。如果在给定的选定标签项中,另一个视图控制器被推入堆栈,然后使用storyboard segues或pushViewControllerpopViewController弹出UINavigationController的堆栈,当您选择另一个标签项时,应用程序崩溃。我追踪了这一点,发现有一个僵尸对象,即被推送然后弹出的视图控制器。该应用显然是试图向其发送消息。这是日志消息。iOS应用程序在UITabItem上选择时崩溃

*** -[UserInputViewController respondsToSelector:]: message sent to deallocated instance 0xa5f0620

我见无处在我的代码我在哪里访问视图 - 控制一旦它被弹出堆栈,并可能释放,因而被点击标签栏项目时,我没有做任何特殊处理。实际上它之前崩溃了

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 

甚至被称为。它似乎以某种方式标签栏仍然认为这个viewcontroller被分配,并在堆栈上,否则为什么会尝试发送一条消息?

任何帮助,非常感谢。

+0

有两个问题。您是否使用独立标签栏或标签栏控制器?其次,你这样说:“使用任一故事板segues弹出UINavigationController的堆栈。”你是否使用segue弹出视图控制器? – rdelmar

+0

我正在使用标签栏控制器,我试图用编程方式弹出视图控制器使用segue。无论哪种方式它崩溃,但事实证明,这不是问题。我不小心被指定为标签栏控制器的委托,它视图控制器(我用的是这这样做,错误地基础视图控制器类)。当我改变了,崩溃就走开了。解决方案是在这里http://stackoverflow.com/questions/14927677/view-controller-getting-a-message-sent-to-it-after-release-causes-a-crash?rq=1 –

+0

在任何情况下,你不应该使用segue从视图控制器中弹出,除非您使用unwind segue。 – rdelmar

回答

相关问题