我目前正在开发一款根据用户构建一堆控制器的应用。
基本上,我有UIViewController
UIButton
导致另一个UIView Controller
;它有一个通向另一个视图控制器的按钮,依此类推。按下视图控制器,以便当用户总是按下按钮时,我得到一堆多个视图控制器。只要用户想要返回上一个视图控制器,就会弹出视图。
一切运作良好(推动和弹出)。但是,在随机实例中,应用程序会崩溃。我注意到,当已经有大量的视图被推送时会发生这种情况,我怀疑它可能是一个内存问题。
我的问题是,除了推动视图控制器之外,还有其他方法可以避免堆叠视图吗?也可能是崩溃不是因为堆积的视图,而是因为我只是遗漏了一些东西?日志中没有错误,因此我无法了解发生了什么,我也是iOS开发的新手。
非常感谢!
编辑1:日志中没有错误,但是当应用崩溃时,会显示以下消息:
Thread 1: EXC_BAD_ACCESS(code = 1, address = 0xd000000c)
编辑2:这就是我推动控制器的方式:
CustomController *custom = [self.storyboard instantiateViewControllerWithIdentifier:@"Custom"];
[self.navigationController pushViewController:custom animated:YES];
这就是我按下后退按钮时弹出它的方式:
[self.navigationController popViewControllerAnimated:YES];
编辑3:在方案中启用zombie对象后,我在多次推送和弹出后开始收到此消息:
嵌套推送动画可能导致导航栏损坏 在意外状态下完成导航过渡。导航栏子视图树可能已损坏。
的开始/结束外观转换的不平衡调用这些消息是否说明问题实际上是在用动画推动控制器?谢谢大家!
编辑4:我会尝试修改问题,使其更具描述性 这是我的设置:
控制器A显示与不同位置对应的图标。您可以单击图标以按下控制器B并显示位置A的详细信息。
控制器B显示有关位置A的信息,其中显示控制器A的按钮,该按钮现在显示靠近位置A位置的图标。现在,您可以再次单击图标,例如位置B,并显示详细信息等。
当用户按下后退按钮时,它应显示前一个视图控制器。这就是我使用push和pop的原因。有没有更好的方法来处理这个过程。再次感谢!
答案 0 :(得分:0)
我的建议是:检查Zombie Objects是否已启用并使用仪器“Allocations”来查看您的应用程序是否确实存在内存问题。通过这些工具提供的信息,您可以了解应用程序正在发生的事情并进行处理。 如果您需要帮助,请告诉我。
祝你好运!答案 1 :(得分:0)
当按下或弹出时,您应该关闭动画。我认为这会在动画没有完成时导致崩溃。
推送:self.navigationController pushViewController:custom animated:NO];
Pop:[self.navigationController popViewControllerAnimated:NO];
答案 2 :(得分:0)
我的猜测是你用动画推送多个视图控制器 - 这可能是错误的根本原因。如果您推送多个视图控制器,则应仅设置LAST推送动画,例如:
VC1 *vc1 = [self.storyboard instantiateViewControllerWithIdentifier:@"VC1"];
[self.navigationController pushViewController:vc1 animated:NO];
VC2 *vc2 = [self.storyboard instantiateViewControllerWithIdentifier:@"VC2"];
[self.navigationController pushViewController:vc1 animated:NO];
VC3 *vc3 = [self.storyboard instantiateViewControllerWithIdentifier:@"VC3"];
[self.navigationController pushViewController:vc1 animated:YES];
然而,我几乎无法想象需要多次推送的情况 - 我认为它总会导致糟糕的用户体验。