iphone - 如果用户之前访问过此页面,如何实现自动跳转到详细页面(或修复我的代码以执行此操作,该代码存在设计缺陷)

标签 iphone ios uinavigationcontroller uitableview didreceivememorywarning

关于如何解决我遇到的这个问题有什么建议,或者更好的实现设计吗?

要求

  • 需要一种方法让应用程序在启动时将用户带到上一个详细信息页面(如果这是他们在上次 session 中退出应用程序之前所在的页面)
  • 如果它们位于应用的主屏幕上,那么在重新启动时它们可以停留在此处
  • 假设我正在使用 UINavigationController,并且主屏幕和详细信息屏幕构建在 UITableViewController 上

我的实现理念

  • 检查“viewdidLoad”以查看它们是否在详细屏幕上,如果是则跳转到此(请参阅下面的代码)

问题

  • 正常情况下工作正常,但是当我触发内存警告时,事情就会出错,导航栏会出现奇怪的行为。例如,当我看起来像是在详细信息页面内容(UITableView)上时,我看到了主页导航按钮

我的分析

  • 从我在详细信息页面(appointmentsListController)上看到的情况来看,我看到模拟器中出现内存警告:

    (a)主页“viewDidLoad”实际上被调用,这是我的概念没有预料到的,所以虽然我从详细 View (UINavigationController)点击“后退”按钮转到主视图(RootViewController),但事实上我的代码已运行,它尝试将用户再次返回到详细信息页面

    (b) 我在日志中注意到,在这一点之后,[AppointmentListController viewDidLoad] 似乎在调用之前的 AppointmentListController dealloc 方法之前被调用(即就像我在 Controller A 中一样,返回到 Controller B,但被抛出了到 A - 第一部分的初始释放直到很晚才开始......)

  • 所以我想很明显我的想法不太好

问题

关于如何更好地实现我的要求有什么建议吗? (如何检查,放入哪个方法)

代码

- (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]; 
    } 

}

最佳答案

这是我的建议:不要将此逻辑放在 View Controller 中,而是放在应用程序委托(delegate)中。通过在显示导航堆栈之前构建导航堆栈,您将有望避免导航栏等可能发生的一些奇怪的事情。要消除内存警告,您可能需要查看应用程序如何分配内存:它可能不一定是与此相关。

无论如何 - 在您的应用程序委托(delegate)中,您可以执行检查以查看用户退出时是否位于详细信息页面上。如果是,您可以创建一个包含导航堆栈的数组(即主屏幕 -> 详细信息页面)。然后,您可以使用其 setViewControllers 方法将其传递到导航 Controller 中。完成此操作后,您可以显示窗口并完成启动应用程序。

关于iphone - 如果用户之前访问过此页面,如何实现自动跳转到详细页面(或修复我的代码以执行此操作,该代码存在设计缺陷),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6242265/

相关文章:

ios - 在 Swift 中将拾取的图像从 UIImagePicker 设置为 UIImageView

ios - 自定义 UINavigationBar 适用于模拟器,但不适用于已发布版本

ios - 如何删除 objective-c 中的 UINavigationController/UINavigationBar 背景?

iphone - 在 iPhone 上使用 OpenGL 的分层 2D 应用程序最有效的 "architecture"?

iphone - TTTableImageItem 在滚动之前不会加载图像

iphone - 核心数据中实体内的实体 - Xcode

ios - backBarbuttonitem 什么都不做?

ios - 如何在越狱的ios设备上启用热点服务

swift - UINavigationController 始终响应选择器 interactivePopGestureRecognizer?

iphone - iPhone SDK 4.0 中的滑动手势?