簡體   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