2012-04-24 194 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 2012-04-24 06:25:54

回答

2

正确读取您的控制台输出,默认情况下,每个视图的标记都为'0',因此它可能会因为除了uibutton以外的其他视图而崩溃,并且可能是该视图不具有titleLabel属性。因为它是UIButton的属性。

+0

***由于未捕获的异常'NSInvalidArgumentException',原因:' - [UIView titleLabel]:无法识别的选择器发送到实例0x98053a0' ***第一次抛出调用堆栈:blar blar .. – 2012-04-24 06:31:46

+0

控制台消息高于 – 2012-04-24 06:32:07

+1

** [UIView titleLabel]:**它应该是** [UIButton titleLabel] **,它意味着 - [self.view viewWithTag:button.tag]这里返回UIView(您当前的视图(您通过'self'访问)) )..你需要用1或别的东西来启动按钮标签。但不能用0.所以它不会与任何视图发生冲突。 – 2012-04-24 06:38:09