【问题标题】:pushing a controller to UINavigationController work on iPad but not on iPhone将控制器推送到 UINavigationController 在 iPad 上工作,但在 iPhone 上不工作
【发布时间】:2013-01-21 12:15:06
【问题描述】:

我在为 iPad 和 iPhone 开发应用程序时遇到了一个非常烦人的问题。

我希望我的导航控制器(由故事板设置)推送一个显示一些详细信息的视图控制器。

以下代码曾经有效,但现在我在 iPhone 上推动控制器时遇到黑屏,而完全相同的代码在 iPad 上可以正常工作。所有使用的控制器都是非零值。发生的情况是显示了使用 navigationController 更改视图的通常动画,但之后只有黑屏。

ADetailViewController* detailController =
    [self.storyboard instantiateViewControllerWithIdentifier:@"ADetailViewController"];
    exposeController.data = aRealEstate;
    exposeController.appData = self.appData;
    [self.navigationController pushViewController: detailController animated:YES];

我对代码进行了一些调试,发现调用了 ADetailViewController 类的 viewDidLoad,但没有调用 viewDidAppear,这意味着显示了详细信息视图(我也通过黑屏注意到 :-))

我会很感激这个问题的一种提示。

更新

我设法自己解决了这个问题。造成这种情况的原因是我在委托依赖项中构建了一个循环依赖项。这用于在 rootView 将要隐藏时弹出推送的视图。

【问题讨论】:

    标签: iphone ios objective-c uinavigationcontroller


    【解决方案1】:

    您正在使用情节提要,那么为什么不使用 segue?

    视图控制器的所有实例化都是通过执行 segue 来处理的。您可以在prepareForSegue: 中方便地进行所有自定义。

    我相信您的错误是由 iPhone 和 iPad 故事板中的不同配置引起的。如果您决定使用 segue,则推送视图控制器的过程会更加透明,您将能够更轻松地找到问题。

    【讨论】:

    • 感谢您的提示。事实上,现在代码感觉更好了,我正在使用手动 segues 进行控制器之间的转换。不幸的是,这对“黑屏”问题没有任何作用。
    • 不幸的是,导航控制器不显示我推送的任何视图的问题并没有帮助。
    • 好吧,然后编辑您的问题并在prepareForSegue: 中显示您的代码。
    【解决方案2】:

    我有两个建议给你:

    1. 您是否尝试过清理您的项目?
    2. 也许ADetailViewController 标识符不是UIViewController,这可能是因为标识符存储在 iPhone 情节提要的错误字段中。

    祝你好运

    【讨论】:

    • 您好,谢谢您的回答。我多次清理了该项目,并从设备中删除了该应用程序。 ADetailViewController 是一个 UITableViewController。控制器的初始化和加载按预期执行(我在其中调试...)。
    猜你喜欢
    • 2012-01-22
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 2016-07-07
    相关资源
    最近更新 更多