Objective c iOS 7:在textfield上确实更改了第一响应程序我的应用程序正在崩溃

Objective c iOS 7:在textfield上确实更改了第一响应程序我的应用程序正在崩溃,objective-c,ios7,textfield,Objective C,Ios7,Textfield,我有一个可编辑的tableview单元格,当我从表中的第一个textfield移动到最后一个textfield时,它会崩溃。代码是。下面的代码是textfield委派的代码 -(void)textFieldDidBeginEditing:(UITextField *)sender { NSIndexPath *indexpath = [NSIndexPath indexPathForRow:sender.tag inSection:1]; EditableTextFieldCell

我有一个可编辑的tableview单元格,当我从表中的第一个textfield移动到最后一个textfield时,它会崩溃。代码是。下面的代码是textfield委派的代码

-(void)textFieldDidBeginEditing:(UITextField *)sender
{
   NSIndexPath *indexpath = [NSIndexPath indexPathForRow:sender.tag inSection:1];
    EditableTextFieldCell *cell = (EditableTextFieldCell *)[self.documentdetailTable cellForRowAtIndexPath:indexpath];
    self.actField = cell.textFieldOne;
    if([self.actField canBecomeFirstResponder]){
        [self.actField becomeFirstResponder];
    }
}
 -(BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
   if (self.actField == textField) {
      [self.actField resignFirstResponder];
    }
    return YES;
}
-(void)textFieldDidEndEditing:(UITextField*)sender
{
if (self.quantityValue !=nil)
        {
            [self.quantityArray replaceObjectAtIndex:[sender tag] withObject:sender.text];
            [[self.documentItemsArray objectAtIndex:[sender tag]] setQUANTITY:[NSNumber numberWithDouble:[sender.text doubleValue]]];
            [self.documentdetailTable reloadData];
        }
}
- (BOOL)textFieldShouldClear:(UITextField *)textField {
self.quantityValue=@"";
return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}
-(void)textFieldDidChange:(UITextField *)theTextField
{
    NSLog( @"text changed: %@", theTextField.text);
    self.quantityTextField = theTextField;
    self.actField = theTextField;

}

//add the textfield listeners
[self.quantityTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingDidBegin];
但它正在崩溃,我得到了这样的信息:

**EditableTextFieldCell _didChangeToFirstResponder:]: message sent to deallocated instance 0xc3c6bf0**

也许这个答案有点愚蠢,但却是正确的答案。 我已检查tableview CellForRowatineXpath并添加了一个标识符

static NSString *EditableTextFieldCellIdentifier = @"EditableCell";

// using custom cells to show textfield and multiple columns
EditableTextFieldCell *cellText = [tableView dequeueReusableCellWithIdentifier:EditableTextFieldCellIdentifier];

这解决了我的问题,也解决了崩溃问题。

我们也遇到了同样的问题,这是因为我们使用“旧代码”来创建自定义UITableViewCells或将其出列

我们要做的是在ViewDidLoad中添加这些行

[self.myTableView registerClass:[ExpenseListCell class] forCellReuseIdentifier:@"ExpenseListCell"];
[self.myTableView registerNib:[UINib nibWithNibName:@"ExpenseListCell" bundle:nil] forCellReuseIdentifier:@"ExpenseListCell"];
然后“清理”函数cellforrowatinexpath,以仅使用出列函数:

ExpenseListCell *cell = (ExpenseListCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
我怀疑,因为它们包括故事板,所以出列可重用CellWithIdentifier管理单元的创建,因此您不再需要我们在出列后仍在使用的这行代码:

if(cell == nil)
{
    cell = [[[NSBundle mainBundle] loadNibNamed:@"ExpenseListCell" owner:cell options:nil] objectAtIndex:0];
}
注:我们不使用故事板

改变这一点,解决了iOS7上的问题。

也有同样的问题。 我通过将标识符放在表视图单元格的nib文件中修复了它。 然后在CellForRowatineXpath处进行一个出列调用:

static NSString *fsCellIdentifier = @"configurationCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:fsCellIdentifier];

这意味着此时将释放您所引用的文本字段。如果在将子视图添加到视图后立即释放子视图,则在iOS 7中会出现此类错误。删除此行[self.quantityTextField resignFirstResponder];如果我删除这一行[self.quantityTextField resignFirstResponder];那么,我不能让其他文本字段作为第一响应程序。在iOS7中有解决方案吗?我只在iOS7中面临同样的问题,它在iOS 6中工作。只有当我们快速滚动并从TableView中选择任何单元格时,它才会崩溃。谢谢!我们有一个带有文本字段的自定义表格单元格视图。我必须添加重用标识符,以避免在iOS 7中出现崩溃,当用户从屏幕上滚动一个文本字段行并选择另一行时。它在iOS 8中没有重用标识符的情况下工作。只是一个小细节:此更改与IOS5不兼容。这完美地解决了我的问题。我不得不修改很多代码,但这是值得的!