所以我使用一个NavigationController来做我的iOS App的所有导航。在主屏幕上有一个'加号按钮'来拍摄图像,在按下这个按钮时,NavigationController用'displayCamera:'方法推送'CameraViewController'。在那里用户可以拍摄一个图像它应该被另一个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
如果您需要更多的信息,请告诉我。
感谢你的时间和帮助
我建议您使用延迟实例化方法。添加一个属性:
@Property(nonatomic,strong) MainViewController *mainView;
@Property(nonatomic,strong) PictureCheckViewController *checkView;
和自己重写getter:
-(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
我相信除了解决你的问题,它还可以避免创建,除非资源实际使用