Iphone viewDidLoad在initWithFrame之前被调用?
我有一个自定义的init方法:Iphone viewDidLoad在initWithFrame之前被调用?,iphone,objective-c,ios,ipad,Iphone,Objective C,Ios,Ipad,我有一个自定义的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;
- (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之前被调用。这怎么可能
我猜是因为我叫super init?如果没有,我如何执行此操作?在
initWithFrame:andImage:
方法之前,不会调用viewDidLoad
方法。在initWithFrame:andImage:
方法期间,将调用您的viewDidLoad
方法
您的initWithFrame:andImage:
方法包含以下行:
self.view.frame = frame;
这是这个的简写:
[[self view] setFrame:frame];
因此,您的方法正在调用-[UIViewController视图]
方法。-[UIViewController视图]
方法基本上是这样的:
- (UIView *)view {
if (!_view) {
[self loadView];
[self viewDidLoad];
}
return _view;
}
尝试在
viewDidLoad
方法中放置断点。当它被击中时,查看堆栈跟踪。您将在其中找到initWithFrame:andImage:
。要继续这一点,您不应该在init方法中进行此类工作。所有这些都应该在viewDidLoad
中。您的imageView
通常不会存在于您的init方法中,除非您通过引用view
强制加载nib文件。那么如何将图像和帧提供给视图控制器呢?如何传递它?您可以将其存储在实例变量中,以便稍后在viewdiload
期间使用。因此,我只需在呈现它之前执行fullSize.instanceVariable?