推送UIViewController失败了"应用程序试图在目标上推送一个nil视图控制器"

时间:2015-10-26 23:43:03

标签: ios objective-c uiviewcontroller uinavigationcontroller

所以我使用NavigationController来完成iOS App的所有导航。在主屏幕上有一个加号按钮'拍摄图像,按下此按钮,NavigationController会按下“CameraViewController”按钮。使用方法' displayCamera:'。在那里,用户可以拍摄图像,并且应该由另一个UIViewController预览,该UIViewController由函数“picTaken:'”推动。但是超时我尝试推动这个视图控制器我得到了错误"应用程序尝试在目标上推送一个nil视图控制器"。我不知道出了什么问题。下面是NavigationController.h和相应的.m文件

NavigationController.h

#import <UIKit/UIKit.h>

#import "CameraViewController.h"
#import "MainViewController.h"
#import "PictureCheckViewController.h"

@interface NavigationController : UINavigationController {
    CameraViewController *camView;
    MainViewController *mainView;
    PictureCheckViewController *checkView;
}

- (void)displayCamera:(id)sender;

- (void)picTaken:(id)sender;

@end

NavigationController.m

#import "NavigationController.h"

@interface NavigationController () {

}

@end

@implementation NavigationController

- (void)viewDidLoad
{
    [super viewDidLoad];
    camView = [[CameraViewController alloc] init];
    mainView = [[MainViewController alloc] init];
    checkView = [[PictureCheckViewController alloc] init];

}

 - (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)displayCamera:(id)sender {
    [self pushViewController:camView animated:YES];
}

- (void)picTaken:(id)sender {
    [self pushViewController:checkView animated:YES];
}

@end

如果您需要更多信息,请告诉我。

感谢您的时间和帮助:)。

1 个答案:

答案 0 :(得分:0)

我建议你使用惰性实例化方法。 添加一个属性:

@Property(nonatomic,strong) MainViewController *mainView;
@Property(nonatomic,strong) PictureCheckViewController *checkView;

并自己覆盖吸气剂:

-(MainViewController*) mainView {
    if(!_mainView) {
        _mainView = [[MainViewController alloc] init];
    }
    return _mainView;
}

和checkView一样明智。

-(PictureCheckViewController*) checkView {
    if(!_checkView) {
        _checkView = [[PictureCheckViewController alloc] init];
    }
    return _checkView;
}

然后使用:

进行访问
self.checkView
self.mainView

除了我相信修复你的问题之外,它还会避免创建,除非实际使用了资源。