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