繁体   English   中英

在initWithFrame之前调用viewDidLoad?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM