我有一个UITableViewCell的子类,当它击中[super dealloc]行时会崩溃。我的单元格中有几个textFields,错误消息是*** -[UITextField release]: message sent to deallocated instance 0x739dfd0
下面是相关的代码片段(我确实有其他textFields,但它们都是以同样的方式处理。我怀疑它是将它添加到单元格的contentView。但我不知道如何纠正它
Custom UITableViewCell的.h文件:
@interface ExerciseTableViewCell : UITableViewCell {
UITextField *textField1;
}
@property (nonatomic, retain) UITextField *textField1;
@end
.m文件:
@implementation ExerciseTableViewCell
@synthesize textField1;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
UIView *myContentView = self.contentView;
UITextField *newTextField1 = [[UITextField alloc] init];
self.textField1 = newTextField1;
[newTextField1 release];
[myContentView addSubview:textField1];
}
return self;
}
}
- (void)dealloc {
[textField1 release];
[super dealloc];
}
我不明白为什么我会多次发布textField?
答案 0 :(得分:2)
变化:
UITextField *newTextField1 = [[UITextField alloc] init];
self.textField1 = newTextField1;
[newTextField1 release];
[myContentView addSubview:textField1];
为:
self.textField1 = [[[UITextField alloc] init] autorelease];
[myContextView addSubview:self.textField1];
答案 1 :(得分:1)
需要在本地声明文本字段并将其分配给全局声明的文本字段,只需使用
textField1 = [[UITextField alloc] init];
[myContentView addSubview:textField1];
答案 2 :(得分:0)
将textfield对象设置为nil而不是释放它。其次,请在编码时使用适当的命名约定。