我似乎有一个非常奇怪的问题。我的应用有一个UITabBar
,可让您选择各种视图控制器。如果在给定的选定选项卡项中,另一个视图控制器被推入堆栈,然后使用故事板segues或UINavigationController
或pushViewController
从popViewController
的堆栈中弹出,当您选择另一个时标签项,应用程序崩溃。我跟踪了这个并发现有一个僵尸对象,即被推动然后弹出的viewcontroller。该应用程序显然正在尝试向其发送消息。这是日志消息。
*** -[UserInputViewController respondsToSelector:]: message sent to deallocated instance 0xa5f0620
我在代码中看到的地方,一旦它从堆栈中弹出并且可能已经取消分配,我访问了viewcontroller,并且在单击标签栏项目时我没有做任何特殊处理。实际上它在
之前崩溃了 - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
甚至被称为。似乎标签栏仍然认为这个viewcontroller已经被分配并且在堆栈上,否则为什么它会尝试向它发送消息呢?
非常感谢任何帮助。
答案 0 :(得分:1)
发现了这个问题。那个解除分配的视图控制器实际上被指定为UITabBarController
的委托!哎呀。在这里找到了这个答案。
View Controller getting a message sent to it after release, causes a crash