尝试删除拒绝辞职包含行第一个响应(Attempt to delete row containing

2019-07-05 12:48发布

我有一个实现了一个基于6-IOS项目UITableView 。 在表视图每个单元包含一个UITextField允许用户输入信息。 如果用户清除文本字段中,或从场删除所有输入(即[textfield length] == 0 )时,他们分接到另一小区(文本字段)它从表视图删除先前的小区(文本字段),因为它是空的 - 这避免了空单元格的表视图积累。

这是所有做使用调用方法-textFieldEditingDidEnd:它将触发对UIControlEventEditingDidEnd事件的文本字段:

- (void)textFieldEditingDidEnd:(UITextField *)textField {

    NSIndexPath *indexPath = // Index path of the row in the table view

    if ([textField.text length] == 0) {
        // Delete the cell from the table view
        [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    }

}

然而,当代码与在控制台上显示以下信息发射应用程序崩溃:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Attempt to delete row containing first responder that refused to resign'

我从来没有见过这条消息,并有不似乎是它特别多引用在网上搜索时。 我将不胜感激,就如何解决这个问题的任何建议。

Answer 1:

我从来没有见过那个消息之前,但我的眼前的冲动,如果我看到这将是:尽量延迟性能。 即使这样简单的东西可能是一个有趣的实验:

dispatch_async(dispatch_get_main_queue(), ^{
    [self.tableView deleteRowsAtIndexPaths:@[indexPath] 
     withRowAnimation:UITableViewRowAnimationAutomatic];
});

我想到这里,让我们不要尝试删除该行,而文本字段仍处于(即同时报告textFieldEditingDidEnd仍在运行); 让我们给runloop机会完成其周期。



Answer 2:

我也面临着同样的问题。 而键盘是目前需要调用resignFirstResponder第一然后调用UITableview重载方法后,

(void)textFieldDidEndEditing:(UITextField *)textField

委托方法执行或内:

(void)textFieldDidEndEditing:(UITextField *)textField{
    [tableview reloadData];
}


Answer 3:

我崩溃是从一个可编辑UIWebView一个内部UICollectionViewCell 。 以下固定它:

[self.view endEditing:YES]



Answer 4:

我碰到同样的NSInternalInconsistencyException例外。 我的解决办法如下:

textView.selectedTextRange = nil;    // clear the selected text
[textView resignFirstResponder];


Answer 5:

删除时得到这个错误UITableViewCell包含一个UITextView从键盘隐藏UIKeyboardWillHideNotification通知。

修复是逻辑移入UIKeyboardDidHideNotification



Answer 6:

我碰到这个问题时,我的方法是textFieldShouldEndEditing在某些情况下返回NO



Answer 7:

我也经历了同样的问题。 即使叫“resignFirstResponer”和“endEditing”后,可以发现,被​​撞毁。

当我和@马特的方法试过了,工作正常。 感谢马特。

这似乎是因为我们添加的“deleteRowsAtIndexPaths:”到GCD队列,队列将确保上一个任务是在队列中完成,然后才开始在main_queue下一个任务。 因此,无需添加任何延迟。



文章来源: Attempt to delete row containing first responder that refused to resign