[英]viewDidLoad getting called before initWithFrame?
我有一个自定义init方法:
- (id) initWithFrame:(CGRect ) frame andImage:(UIImage *) image
{
self = [super init];
if (self){
self.view.frame = frame;
self.imageView_.image = image;
self.imageScrollView_.frame = self.view.frame;
imageOriginalFrame = frame;
zoomedImageFrame = frame;
NSLog(@"SCREEN DIM %f AND %f", zoomedImageFrame.size.height, zoomedImageFrame.origin.y);
}
return self;
}
这是我如何呈现它:
FullSizeImageViewController * fullSize = [[FullSizeImageViewController alloc] initWithFrame:imageOriginalFrame andImage:image];
if ([self.delegate respondsToSelector:@selector(fullStoryViewController:presentModalViewController:animated:)]) {
[self.delegate fullStoryViewController:self presentModalViewController:fullSize animated:YES];
}
但是,令人惊讶的是我的viewDidLoad在initWithFrame之前被调用。 这怎么可能?
我猜这是因为我打电话给超级初始化? 如果不是我该怎么做?
您的viewDidLoad
方法未在 initWithFrame:andImage:
方法之前调用。 在 initWithFrame:andImage:
方法期间调用viewDidLoad
方法。
你的initWithFrame:andImage:
方法包含这一行:
self.view.frame = frame;
这是简写:
[[self view] setFrame:frame];
所以你的方法是调用-[UIViewController view]
方法。 -[UIViewController view]
方法基本上是这样的:
- (UIView *)view {
if (!_view) {
[self loadView];
[self viewDidLoad];
}
return _view;
}
尝试在viewDidLoad
方法中添加断点。 当它被击中时,查看堆栈跟踪。 你会发现initWithFrame:andImage:
in。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.