-1

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 行を削除しても、エラーは発生しません。しかし、スーパーへの呼び出しは、まったくオーバーライドしないこととまったく同じではありませんか? 違いはなぜですか?

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 に答える