我创建了三个文件:MyViewController.h
' MyViewController.m, MyViewController.xib. In the
xib` 文件我创建了一个 UIScrollView 作为根级元素,并与其文件所有者建立了所有必要的连接。
在我的.m
文件中,我覆盖了loadView
设置 ScrollView 的一些附加属性的方法。
-(void)loadView{
[super loadView];
UIScrollView *tmp = (UIScrollView *)[self view];
[tmp setMaximumZoomScale:3.0]; // crashed here
}
但是,代码在函数的最后一行崩溃了,日志说:
-[UIView setMaximumZoomScale:]: unrecognized selector sent to instance 0x1cda5d60
尽管有明确的演员表,但似乎tmp
被认为是 a UIView
,而不是 a 。UIScrollView
我的理解是[super loadView];
从 xib 文件中加载视图并设置 ViewController 的视图。即使我将崩溃的代码行移到viewDidLoad
函数中,它也无济于事。
编辑:
我在 Apple 的文档站点中发现了类似的模式:
- (void)viewDidLoad {
[super viewDidLoad];
UIScrollView *tempScrollView=(UIScrollView *)self.view;
tempScrollView.contentSize=CGSizeMake(1280,960);
}
编辑2:
我稍微缩小了问题的范围。[self view]
现在我已经将转换为的代码移到了viewDidLoad
,并且只有在我覆盖时才会出现错误loadView
。如果我添加
-(void)loadView{
[super loadView];
}
将发生错误。如果我删除这三行,没有错误。但是,对 super 的调用与根本不覆盖不完全一样吗?为什么有区别?