6

我有一个基于 iOS 6 的项目,它实现了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'

我以前从未见过这条消息,在网上搜索时似乎也没有特别多的引用。我将不胜感激有关如何解决此问题的任何建议。

4

7 回答 7

16

我以前从未见过该消息,但如果我看到它,我的直接冲动是:尝试延迟性能。即使像这样简单的事情也可能是一个有趣的实验:

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

我的想法是,当文本字段仍在报告时(即textFieldEditingDidEnd仍在运行时),我们不要尝试删除行;让我们给 runloop 一个机会来完成它的循环。

于 2012-12-17T01:50:58.493 回答
1

我也面临同样的问题。当键盘存在时,您需要先调用,resignFirstResponder然后再调用UITableviewreload 方法

(void)textFieldDidEndEditing:(UITextField *)textField

委托方法执行或内部:

(void)textFieldDidEndEditing:(UITextField *)textField{
    [tableview reloadData];
}
于 2015-02-26T08:55:08.153 回答
1

我的崩溃UIWebView来自UICollectionViewCell. 以下修复了它:

[self.view endEditing:YES]

于 2016-04-13T18:52:21.843 回答
0

我也遇到了同样的问题。即使调用 "resignFirstResponer" 和 "endEditing" 后,发现它崩溃了。

当我尝试使用@matt 的方法时,它运行良好。谢谢马特。

似乎因为我们将“deleteRowsAtIndexPaths:”添加到 GCD 队列中,队列将确保队列中的前一个任务完成,然后只启动 main_queue 中的下一个任务。因此无需添加任何延迟。

于 2014-05-26T09:29:40.173 回答
-1

我遇到了同样的NSInternalInconsistencyException例外。我的解决方案如下:

textView.selectedTextRange = nil;    // clear the selected text
[textView resignFirstResponder];
于 2013-01-21T06:20:51.257 回答
-1

从键盘隐藏通知中删除UITableViewCell包含 的时出现此错误。UITextViewUIKeyboardWillHideNotification

修复是将逻辑移入UIKeyboardDidHideNotification

于 2013-02-22T22:58:47.483 回答
-1

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

于 2013-10-29T17:26:46.210 回答