3 つのファイルを作成しました: MyViewController.h
, ' MyViewController.m, MyViewController.xib. In the
xib` ファイル 1 つの 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
として認識されたようです。xibファイルからビューをロードし、ViewControllerのビューを設定するのは私の理解です。クラッシュしたコード行を関数に移動しても役に立ちませんでした。UIView
UIScrollView
[super loadView];
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];
}
エラーが発生します。この 3 行を削除しても、エラーは発生しません。しかし、スーパーへの呼び出しは、まったくオーバーライドしないこととまったく同じではありませんか? 違いはなぜですか?