-1

我创建了三个文件:MyViewController.h' MyViewController.m, MyViewController.xib. In thexib` 文件我创建了一个 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 的调用与根本不覆盖不完全一样吗?为什么有区别?

4

1 回答 1

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];

}

这对我来说也很好。

于 2013-03-05T05:27:12.047 回答