我想知道如何正确地执行此操作,因为我收到了错误访问错误。
在我的应用中,我有81 UIButtons
,其中IBAction
通过Interface Builder附加到所有这些,IBAction
应该设置用户点按的按钮的文本。我试图这样做:
- (IBAction)changeTitle:(UIButton *)button {
button.titleLabel.text = [NSString stringWithFormat:@"%@", myString];
}
-(IBAction)setMyString:(id)sender{
myString = [NSString stringWithFormat:@"text"];
}
然而,这会导致错误访问错误,我该如何解决? 百万谢谢!
错误消息:EXC_BAD_ACCESS(code = 1,address = 0x0) (LLDB)
答案 0 :(得分:5)
您不应尝试直接设置标签文字,而是使用UIButton setTitle:forState:
:
- (IBAction)changeTitle:(UIButton *)sender {
[button setTitle:myString forState:UIControlStateNormal];
}
label
属性可用于配置标签的字体和其他属性等内容,但必须使用UIButton
方法设置其中一些属性(颜色,阴影颜色和文本)
答案 1 :(得分: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];
}