1

我想知道如何正确地做到这一点,因为我收到了 Bad Access 错误。

在我的应用程序中,我有 81UIButtonsIBAction通过 Interface Builder 附加到所有这些,这IBAction应该设置用户点击的按钮的文本。我正在尝试这样做:

- (IBAction)changeTitle:(UIButton *)button {
    button.titleLabel.text = [NSString stringWithFormat:@"%@", myString];
}

-(IBAction)setMyString:(id)sender{
myString = [NSString stringWithFormat:@"text"];
}

但是,这会导致错误的访问错误,我该如何解决?百万谢谢!

错误消息:EXC_BAD_ACCESS(代码=1,地址=0x0)(lldb)

4

2 回答 2

5

您不应尝试直接设置标签文本,而应使用UIButton setTitle:forState:

- (IBAction)changeTitle:(UIButton *)sender {
  [button setTitle:myString forState:UIControlStateNormal];
}

label属性可用于配置标签的字体和其他属性,但其中一些(颜色、阴影颜色和文本)必须使用UIButton方法进行设置。

于 2013-06-30T16:44:55.600 回答
4

您可能有内存管理问题。您没有使用 @property 来设置实例变量。您正在手动设置它,因此您必须自己管理内存。

-(IBAction)setMyString:(id)sender{
    [myString release]; // release old instance
    myString = [[NSString stringWithFormat:@"text"] retain];
}

或者更好的是,@property如果您还没有这样做,请为您的变量创建一个并使用 setter 设置您的变量。像这样:

@property (copy, nonatomic) NSString *string; // in your @interface
@synthesize string = myString;                // in your @implementation

-(IBAction)setMyString:(id)sender{
    self.string = [NSString stringWithFormat:@"text"]; // setter will release old value, and retain new value
}

- (IBAction)changeTitle:(UIButton *)button {
    // you should not set the text of the titleLabel directly
    [button setTitle:self.string forState:UIControlStateNormal];
}
于 2013-06-30T17:11:36.987 回答