1

我有一个 UITableViewCell 的子类,它在遇到 [super dealloc] 行时崩溃。我的单元格中有几个文本字段,错误消息是*** -[UITextField release]: message sent to deallocated instance 0x739dfd0

相关的代码片段如下(我确实有其他文本字段,但它们都以相同的方式处理。我怀疑它与将其添加到单元格的 contentView 有关。但我不知道如何更正它。

自定义 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?

4

3 回答 3

2

改变:

UITextField *newTextField1 = [[UITextField alloc] init];

self.textField1 = newTextField1;

[newTextField1 release];

[myContentView addSubview:textField1];

至:

self.textField1 = [[[UITextField alloc] init] autorelease];
[myContextView addSubview:self.textField1];
于 2012-05-20T14:26:09.347 回答
1

在本地声明文本字段并将其分配给全局声明的文本字段需要什么,只需使用

textField1 = [[UITextField alloc] init]; 
[myContentView addSubview:textField1];
于 2012-05-20T14:25:10.727 回答
0

将 textfield 对象设置为 nil 而不是释放它。其次,请在编码时使用正确的命名约定。

于 2012-05-20T14:49:02.173 回答