0

私は非常に単純なアプリケーションを持っています。IB にボタンとラベルがあります。ラベルで setText を呼び出す onClick の IBAction があります。ラベルのアウトレットがあります。すべてが IB で接続されます。シミュレーターで初めてアプリがクラッシュします。もう一度起動すると、テキストが設定されます。そしてまた次もクラッシュ。実際のデバイスでは常にクラッシュします。これは単純なはずですが、何が間違っているのかわかりません。

ありがとう。

私の.hファイルで:

#import <UIKit/UIKit.h>

@interface UntitledViewController : UIViewController {
IBOutlet UILabel *label;
IBOutlet UIButton *button;
}

@property (nonatomic, retain) UILabel *label;

-(IBAction) onClick1: (id) sender;

@end

そして.mで:

- (IBAction) onClick1: (id) sender
{
    //[label setText:@"Hello World!"];
    label.text = @"Hello World!";
    //[button setTitle:@"Clicked" forState:UIControlStateNormal];
}

申し訳ありませんが、私はこのサイトに不慣れです。クラッシュ ログとスタックを取得するにはどうすればよいですか? ありがとう。

4

2 に答える 2

1

IB でラベルの接続を設定したことを再確認してください。
デバッガーの行 label.text = @"Hello World!"; にブレークポイントを設定します。
ここで label が nil でないことを確認してください。
nil の場合、IB で接続を設定していません。

于 2011-09-18T19:20:32.387 に答える
1

編集:この回答は技術的には正しいですが、質問にはまったく回答していません:(申し訳ありません


< 警告 - これは推測です >

ラベルのテキストを設定するときにクラッシュが発生した場合は、過去にラベルに値を設定したが、正しく保持されていないことがわかります。

次のようなコードがあると思います:

label = [[[UILabel alloc] initWithFrame:CGRectMake(0,0,10,10)] autorelease];

次のようなコードが必要な場合

// Option 1
self.label = [[[UILabel alloc] initWithFrame:CGRectMake(0,0,10,10)] autorelease];

また

// Option 2
label = [[UILabel alloc] initWithFrame:CGRectMake(0,0,10,10)];

(最初のものはプロパティを使用してラベルを保持します。2番目のものはそれを自動解放しません。最初のものは推奨される方法です)

于 2011-01-04T11:18:14.353 に答える