6

を実装するiOS6ベースのプロジェクトがあり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'

私はこれまでこのメッセージを見たことがなく、Webを検索するときにこのメッセージへの参照は特に多くないようです。この問題を解決する方法についての提案をいただければ幸いです。

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

同じNSInternalInconsistencyException例外に遭遇しました。私の解決策は次のとおりです。

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

UITableViewCellを含む をUITextViewキーボード非表示UIKeyboardWillHideNotification通知から削除すると、このエラーが発生しました。

修正は、ロジックをに移動することでしたUIKeyboardDidHideNotification

于 2013-02-22T22:58:47.483 に答える
-1

メソッド textFieldShouldEndEditing が状況によっては NO を返したときに、この問題に遭遇しました

于 2013-10-29T17:26:46.210 に答える