освобождение iphone-textfield вызывает сбой приложения - PullRequest
0 голосов
/ 24 января 2012

сэр, я новичок в iphone. Я создаю UITextField с использованием этого кода, но когда я выпускаю его в dealloc, происходит сбой приложения. я хочу сделать текстовое поле кодированием. заранее спасибо.

#import "TextField.h"

@implementation TextField
UILabel *label;
UITextField *textField;

- (void)viewDidLoad 
{
    [super viewDidLoad];

    //Create label
    label = [[UILabel alloc] init];
    label.frame = CGRectMake(10, 10, 300, 40);
    label.textAlignment = UITextAlignmentCenter;
    label.text = @"";
    [self.view addSubview:label];
    [label release];

    // Initialization code
    textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 200, 300, 50)];
    textField.delegate = self;
    textField.placeholder = @"<Enter Text>";
    textField.textAlignment = UITextAlignmentCenter;
    [self.view addSubview: textField];
    [textField release];
}

- (void)dealloc 
{
    [textField release];
    [label release];
    [super dealloc];
}

@end

Ответы [ 3 ]

1 голос
/ 24 января 2012

Вы уже выпустили свое текстовое поле и метку следующим образом: [textField release]; ,[label release]; , чем вы не должны выпускать его снова в методе dealloc. Вы перезаписали текстовый файл и метку, что привело к сбою приложения.Просто удалите его из метода dealloc.

0 голосов
/ 24 января 2012

используйте этот код ... у вас есть метка релиза и текстовое поле два раза ...

#import "TextField.h"

@implementation TextField
UILabel *label;
UITextField *textField;

- (void)viewDidLoad {
[super viewDidLoad];

//Create label
label = [[UILabel alloc] init];
label.frame = CGRectMake(10, 10, 300, 40);
label.textAlignment = UITextAlignmentCenter;
label.text = @"";
[self.view addSubview:label];
[label release];

// Initialization code
textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 200, 300, 50)];
textField.delegate = self;
textField.placeholder = @"<Enter Text>";
textField.textAlignment = UITextAlignmentCenter;
[self.view addSubview: textField];
[textField release];
}

@end
0 голосов
/ 24 января 2012

вы используете [textField release] в двух местах:
1) в ViewDidLoad
2) в методе деллок
Вам не нужно делать это в двух местах. Удалите [textField release] из метода viewDidLoad.

Это потому, что когда вы выделяете экземпляр, для него сохраняется число 1, а когда вы освобождаете его, значение счетчика становится 0. Итак, снова выпустить тот же экземпляр вызывает сбой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...