试图在TableView中保存TextField

时间:2011-06-15 14:54:30

标签: iphone objective-c ios memory-management properties

@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

当我在调试器中查看cellForRowAtIndexPath中的self.text时,它说它是NSZombie_NSString ...所以不知何故它被dealloc'd。我已经尝试将属性设置为复制,使用[initWithString]复制字符串...为什么字符串被dealloc'd?

3 个答案:

答案 0 :(得分:1)

textField.delegate = self;
tableView.dataSource = self;

答案 1 :(得分:1)

您在哪里为“text”属性设置值?

尝试将其设为self.text = [NSString stringWithFormat:@"This is some text"];

话虽如此,作为一种最佳实践,我强烈建议不要使用可能与本机对象属性混淆的“文本”等名称(UILabel.text,UITextField.text等)。从长远来看,它有所帮助:)

答案 2 :(得分:0)

一旦被咬了两次害羞。除此之外,我已经犯了这个错误。

在我的实际代码中

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

但我的意思是

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