0

このビューが読み込まれるたびに、次のようにするとアプリがクラッシュするのはなぜですか?

-(void)loadView {
    UIButton *chooseSubjectButton = [[UIButton buttonWithType:UIButtonTypeDetailDisclosure] retain];
    [chooseSubjectButton addTarget:self action:@selector(chooseSubject) forControlEvents:UIControlEventTouchUpInside ];
    chooseSubjectButton.frame = CGRectMake(15.0f, 205.0f, 296.0f, 51.0f);
    [self.view addSubview:chooseSubjectButton];
}

どんな助けでも大歓迎です。

ありがとう!

4

7 に答える 7

6

私の推測では、あなたのアプリは実際にはクラッシュしていません。loadViewビューの読み込みに失敗したため、メソッドを繰り返し呼び出し続けるだけです。ビューを呼び出す[super loadView]か作成して、self.viewself.viewに何かを追加する前と同じように割り当てます。便利な方法は、 を使用することです。[super loadView]

- (void)loadView {

    [super loadView];
    // Your Code Here
}

編集:この答えは間違っているようです。[super loadView ]を呼び出してもよろしいですか?@Denis Vertがコメントで指摘したように。

于 2011-05-27T12:48:48.090 に答える
2

[super loadView]@Simonによって指摘されたようにあなたの欠如は、別の質問を促します。

このviewControllerに関連する.xibファイルをロードしていますか?もしそうなら、あなたはおそらくでは-viewDidLoadなくでこれを行うことを意味します-viewLoad

私は過去にそれについて自分自身を混乱させたので、ただの考え。

于 2011-05-27T12:50:23.550 に答える
0

このスレッドを読んでいる他の人のためだけに、Octyは[superloadView]を絶対に呼び出さないでくださいと言っています。私はそれについてこのページでいくつかの議論を読みました。Octyの回答に掲載されているドキュメントを読んでください。28ページには、このメソッドを呼び出さないように明記されています。理由も説明されています。そうすることで、デフォルト名(クラス名と同じ)を使用してペン先を探します。このペン先が存在しなくても、処理能力の無駄です。新しいUIViewを作成し、self.viewとして設定するだけです。(このページの例を参照してください)

将来の読者がこれを知っていることを確認したかっただけです。それを理解するのに少し時間がかかりました。

于 2011-07-02T01:36:24.350 に答える
0
-(無効)loadView
{
[スーパーロードビュー];
UIButton *chooseSubjectButton = [[UIButton buttonWithType:UIButtonTypeDetailDisclosure] 保持];
[chooseSubjectButton addTarget:self action:@selector(chooseSubject) forControlEvents:UIControlEventTouchUpInside];
chooseSubjectButton.frame = CGRectMake(15.0f, 205.0f, 296.0f, 51.0f);
[self.view addSubview:chooseSubjectButton];
}

お役に立てれば

于 2011-05-27T13:10:30.600 に答える
0

そのコードを に配置してみてくださいviewDidLoad。初期化コードは、無限のスタック トレースを作成できます。そのボタンを作成するとクラッシュが発生するかどうかはわかりませんが。

間違ってたら誰か訂正して

これを参照してください: iPhone SDK: loadView と viewDidLoad の違いは何ですか?

于 2011-05-27T12:47:50.460 に答える