Попытка сохранить TextField в TableView - PullRequest
0 голосов
/ 15 июня 2011
@property (nonatomic, retain) NSString *text;

с этим свойством я сохраняю текст из текстового поля, которое я создаю в UITableViewCell

static NSString *cellIdentifier = @"fieldTableCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];

    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 12, 275, 25)];
    textField.clearsOnBeginEditing = NO;
    textField.returnKeyType = UIReturnKeyDone;
    [textField addTarget:self action:@selector(textFieldDone:) forControlEvents:UIControlEventEditingDidEndOnExit];
    [cell.contentView addSubview:textField];
}

// re-get textField and set tag to section
if (section == 1) {
    textField.text = self.text; // Where the problem is
    textField.tag = section;
}

и

- (void)textFieldDone:(id)sender {
    UITextField *field = sender;

    if (field != nil) {
         NSInteger section = field.tag;

        if (section == 1) {
            self.text = field.text;
        }
    }
}

Однако, обратно в cellForRowAtIndexPath устанавливается textField.textвернуться к сохраненному тексту.Проблема в том, что когда он делает это, он дает мне

- [CFString _isNaturallyRTL]: сообщение отправляется на освобожденный экземпляр 0x2c459ff0

, когда я смотрю на self.text в cellForRowAtIndexPathв отладчике он говорит, что это NSZombie_NSString ... так что каким-то образом он получает dealloc'd.Я попытался установить свойство для копирования, копирование строки с помощью [initWithString] ... Почему строка получает dealloc'd?

Ответы [ 3 ]

1 голос
/ 15 июня 2011

Где вы устанавливаете значение для свойства "text"?

Попробуйте установить его как self.text = [NSString stringWithFormat:@"This is some text"];

При этом я рекомендую не использовать такие имена, как:«текст», который можно перепутать со свойствами собственного объекта (UILabel.text, UITextField.text и т. д.).Это помогает в долгосрочной перспективе:)

1 голос
/ 15 июня 2011

Набор

textField.delegate = self;
tableView.dataSource = self;
0 голосов
/ 15 июня 2011

один раз укушен, дважды застенчив. За исключением того, что я уже совершил эту ошибку.

в моем действительном коде у меня было

text = textField.text; //var declared in class

Но я имел в виду

self.text = textField.text; //to use the property like in my example
...