2012-04-24 14 views
1

私は以下の情報源を持っています。これはなぜSIGABRTエラーを引き起こすのですか?

- (void)Button:(UIButton *)button { 

    NSString *imageName = ((UIButton *)[self.view viewWithTag:button.tag]).titleLabel.text; 

} 

- (void)viewDidLoad { 

    NSMutableArray *_array = [[NSMutableArray alloc] init]; 

    NSInteger iCount = [_array count]; 

    for (i = 0; iCount > i; i++) { 

     UIButton *btn = [[UIButton alloc] init]; 
     btn.titleLabel.text = [[_array objectAtIndex:i] objectForKey:@"FILE"]; 
     btn.tag = i; 
     [btn addTarget:self action:@selector(Button:) forControlEvents:UIControlEventTouchUpInside]; 
     [self.view addSubview:btn]; 
     [btn release]; 

} 

インデックスメソッドが0のButtonメソッドにアクセスすると、SIGABRTエラーが発生します。 どうすればいいですか?

+0

このエラーは、渡された自己オブジェクトが実際にはボタンではなく、コントローラを表示するために発生します。 – rishi

答えて

2

コンソールの出力を正しく読み込むと、デフォルトですべてのビューにタグ '0'が表示されるため、uibutton以外の表示がされているためクラッシュする可能性があります。また、そのビューにはtitleLabelプロパティです。UIButtonのプロパティであるためです。

+0

***キャッチされていない例外 'NSInvalidArgumentException'の理由でアプリケーションを終了しています、理由: ' - [UIView titleLabel]:インスタンス0x98053a0に送信された認識できないセレクタ' ***先着コールスタック:blar blar .. –

+0

上のコンソールメッセージ –

+1

** [UIView titleLabel]:**これは** [UIButton titleLabel] **である必要があります。つまり、[self.view viewWithTag:button.tag]を返します。これはUIViewを返します(現在のビュー( 'self'でアクセスします)) )..あなたは1などでボタンタグを開始する必要がありますが、0ではなくボタンタグを開始する必要があります。したがって、どのビューでも衝突することはありません。 –

関連する問題