推送 UIViewController 崩溃

Posted

技术标签:

【中文标题】推送 UIViewController 崩溃【英文标题】:Pushing UIViewController crashes 【发布时间】:2012-02-01 00:22:08 【问题描述】:

我有以下代码推送 UIViewController。此代码是在按下UIButton 时执行的目标方法:

-(void)pushNavigationController

    ParameterListerViewController *plvc = [[ParameterListerViewController alloc] init];    
    UINavigationController *nvc = [[UINavigationController alloc] initWithRootViewController:plvc];    
    self.navigationController.navigationBarHidden = YES;
    plvc.numberOfParameters = [[numberOfTrialsField text] intValue];

    NSLog(@"about to push the navigation controller");

    [self.navigationController pushViewController:nvc animated:YES];

在 NSLog 语句之前它会得到,但在那之后,视图控制器永远不会被推送,应用程序只会崩溃。这里是ParameterListerViewController的头文件:

ParameterListerViewController.h
-------------------------------
@interface ParameterListerViewController : UIViewController<UITextFieldDelegate>
    
    UIScrollView* scrollView;

@property(nonatomic) NSInteger numberOfParameters;
@end

这是包含 UIButton 和相应目标方法的头文件,其中包含用于推送导航控制器的代码。

SettingsViewController.h
------------------------
@interface SettingsViewController : UIViewController <UITextFieldDelegate, UIPickerViewDelegate, UITableViewDelegate, UITableViewDataSource>
   
    id <SettingsViewDelegate> delegate;

@end

这是一个被推送的类对象的头文件:

@interface ItemViewController : UITableViewController 


@end

有什么建议吗?

【问题讨论】:

你为什么要把导航控制器推到另一个上面? 试试self.navigationController pushViewController:plvc animated:YES 不幸的是,这也崩溃了。我忘了提到我之前尝试过推送plvc。我创建了一个全新的项目(只是为了确保它不是那些“神秘”错误之一),但它仍然不起作用。我在问题中添加了更多细节。 控制台崩溃时有什么内容? 如果没有看到您的崩溃日志/控制台输出,将很难为您提供帮助。根据以前的经验,另一个可能的原因是您的主视图未在您的 NIB 文件中正确设置。确保视图出口连接到文件所有者并且文件所有者设置为您的视图控制器类ParameterListerViewController。如果是这种情况,您应该会在控制台中看到一个错误。 【参考方案1】:

您的导航控制器的视图必须位于视图层次结构中。 除非导航控制器设置为 UIWindow 的 rootViewController,否则需要显式添加。

试试这个:

    [self.view addSubview:self.nvc.view];

如果是这种情况,您不需要执行 pushViewController - plvc 已经可见。

【讨论】:

你说的是对的,但这不是他问题的答案。他的错误是他推送的是 UINavigationController 而不是 UIViewController。 Rog 的评论是正确答案。 Rog 的回答只能部分解决这个问题,因为 OP 的导航控制器视图仍然不在视图层次结构中。 (它似乎不是一个窗口的 rootViewController,所以它只是挂在那里,没有显示。) @Rayfleck :这不起作用。我的导航控制器是 UIWindow 的 rootViewController,所以我不需要添加任何子视图。我已经用更多相关的细节更新了我的问题。帮忙? 好吧,这还不清楚。当你尝试推动plvc时,会发生什么?你得到什么错误? 我错过了 plvc 中的 [super loadView] 并且搞砸了一切!

以上是关于推送 UIViewController 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

全屏 UIViewController 的 StatusBarStyle

从另一个 UIViewController 推送一个 UIViewController - 如何?

如何从另一个 UIViewController 重新加载 UITableViewController

Monotouch - UIViewController 中的 tableview:不会调用覆盖函数

推送视图不从基于单个视图的应用程序推送 UIViewController

推送 UIViewController