关于如何解决这个问题的建议,或者更好的实现设计?
要求
我的实施理念
问题
我的分析
从我在详细信息页面(约会列表控制器)上看到的内容并在模拟器中导致内存警告时我看到:
(a)主页“viewDidLoad”实际上被调用,这是我的概念没想到的,所以当我从详细视图(UINavigationController)点击BACK按钮转到主视图(RootViewController)时,事实上,我的代码已经运行,并且它会尝试将用户再次返回到详细信息页面
(b)我注意到在我的日志之后,在调用前一个AppointmentListController dealloc方法之前似乎调用了[AppointmentListController viewDidLoad](就像我在控制器A中一样,回到控制器B,但被抛回到A - 并且第一部分的初始dealloc直到晚才开始......)
问题
有关如何更好地实施我的要求的任何建议? (如何检查,将它们放入哪种方法)
代码
- (void)viewDidLoad {
[super viewDidLoad];
// My Implementation of the Requirements which seems flawed in the case there is memory warning triggered
if ( previousSelectedScreen >= 0 ) {
// Setup New Controller
AppointmentListController *appointmentListController = [[AppointmentListController alloc] initWithNibName:@"AppointmentListController" bundle:nil];
appointmentListController.screenToShow = previousSelectedScreen;
// Push new view onto stack
[[self navigationController] pushViewController:appointmentListController animated:NO];
[appointmentListController release];
}
}
答案 0 :(得分:2)
以下是我建议的内容:而不是在视图控制器中使用此逻辑,而是在应用程序委托中使用此逻辑。通过在显示之前构建导航堆栈,您可以避免使用导航栏等可能发生的一些奇怪的事情。要消除内存警告,您可能需要查看应用程序如何分配内存:它可能不一定是与此有关。
无论如何 - 在您的应用程序委托中,您可以执行检查以查看用户退出时是否在详细信息页面上。如果是,则可以创建包含导航堆栈的数组(即主屏幕 - >详细信息页面)。然后,您可以使用其setViewControllers
方法将其传递到导航控制器中。完成后,您可以显示窗口并完成启动应用程序。