viewDidLoad вызывается до initWithFrame? - PullRequest
2 голосов
/ 22 января 2012

У меня есть собственный метод 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.Как это возможно?

Я предполагаю, что это потому, что я называю супер инициалом?Если нет, то как мне это сделать?

1 Ответ

8 голосов
/ 22 января 2012

Ваш viewDidLoad метод не вызывается до вашего initWithFrame:andImage: метода. Ваш viewDidLoad метод вызывается во время вашего initWithFrame:andImage: метода.

Ваш 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: в нем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...