1

[super dealloc] 行にヒットするとクラッシュする UITableViewCell のサブクラスがあります。セルにいくつかのテキストフィールドがあり、エラーメッセージは次のように言っています*** -[UITextField release]: message sent to deallocated instance 0x739dfd0

関連するコード スニペットを以下に示します (他にも textFields がありますが、それらはすべて同じように扱われます。セルの 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 に答える