Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone viewDidLoad在initWithFrame之前被调用?_Iphone_Objective C_Ios_Ipad - Fatal编程技术网

Iphone viewDidLoad在initWithFrame之前被调用?

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;

我有一个自定义的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之前被调用。这怎么可能


我猜是因为我叫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?