【问题标题】:App crashes when popover appears出现弹出框时应用程序崩溃
【发布时间】:2014-11-03 21:16:57
【问题描述】:

我试图在 ios 8 中按下按钮时出现弹出框,但按下按钮时应用程序崩溃。我已经正确设置了所有情节提要并使用断点我确定是这一行导致了问题,即使要在弹出窗口中显示的视图控制器属于 FirstViewController 类:

UIViewController *vc = destNav.viewControllers.firstObject;

这是崩溃:

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[SecondViewController viewControllers]:无法识别的选择器发送到实例 0x1446ea3a0”


这是我这部分的其余代码:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Assuming you've hooked this all up in a Storyboard with a popover presentation style
if ([segue.identifier isEqualToString:@"popover"]) {
    UINavigationController *destNav = segue.destinationViewController;
    FirstViewController *vc = destNav.viewControllers.firstObject;

    // This is the important part
    UIPopoverPresentationController *popPC = destNav.popoverPresentationController;
    popPC.delegate = self;
}
}

- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller {
return UIModalPresentationNone;
}

【问题讨论】:

  • destNav.viewControllers.firstObject 最有可能是nil。您也可以在问题中发布错误消息吗?
  • 发布有关崩溃的详细信息。它究竟是在哪条线上崩溃?崩溃的完整和准确的错误信息是什么?
  • 我已将错误消息添加到问题中,并且最初问题中的确切行。

标签: objective-c xcode cocoa-touch uipopovercontroller popover


【解决方案1】:

我解决了!抱歉,我发布的太晚了

您只需要排除该行

 FirstViewController *vc = destNav.viewControllers.firstObject;

即使所有教程都显示这一行

【讨论】:

    【解决方案2】:

    尝试像这样投射您的视图控制器:

    FirstViewController *vc = (FirstViewController *)destNav.viewControllers.firstObject;
    

    【讨论】:

    • 1) 指针转换仅用于编译时,在运行时无效。 2) 这种转换是不必要的,因为firstObject 返回一个id,它可以在不进行转换的情况下分配给任何指针类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 2021-07-24
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多