我创建了三个文件: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
被识别为UIView
,而不是UIScrollView
,尽管有明确的演员。我的理解是[super loadView];
将从xib文件加载视图并设置ViewController的视图。即使我将崩溃的代码行移动到viewDidLoad
函数,它也无济于事。
编辑:
我在Apple的文档site:
中找到了类似的模式- (void)viewDidLoad {
[super viewDidLoad];
UIScrollView *tempScrollView=(UIScrollView *)self.view;
tempScrollView.contentSize=CGSizeMake(1280,960);
}
编辑2:
我有点缩小了问题。现在我已经将[self view]
转换为viewDidLoad
的代码移动了,只有当我覆盖loadView
时才会出现错误。如果我添加
-(void)loadView{
[super loadView];
}
将发生错误。如果我删除这三行,没有错误。但是对超级的呼唤是不是完全不同于完全没有压倒一切?为什么不同?
答案 0 :(得分:0)
检查与文件所有者的连接的连接检查器是否与滚动视图...
相同见下图...
然后将您的代码放在viewDidLoad ...
中- (void)viewDidLoad
{
[super viewDidLoad];
UIScrollView *tempScrollView=(UIScrollView *)self.view;
[tempScrollView setMaximumZoomScale:3.0];
}
这对我来说很好。
编辑2:
-(void)loadView{
[super loadView];
UIScrollView *tempScrollView=(UIScrollView *)self.view;
tempScrollView.contentSize=CGSizeMake(320,960);
[tempScrollView setBackgroundColor:[UIColor grayColor]];
[tempScrollView setMaximumZoomScale:3.0];
}
这对我来说也很好。