イライラしてクラッシュし続けるView Controllerがあります。textfield には 3 つの textFields (name、item、title) があり、UITextFieldDelegate メソッドを導入する前はすべてうまく機能していました。
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
それを実行し、viewDidLoad で、nameTextField をデリゲートとして設定し、itemTextField と titleTextField を設定しました。アプリを実行して、itemText/titleTextField にいくつかの文字を入力すると、次のエラーでプログラムがクラッシュしました。
Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFString replaceCharactersInRange:withString:]: Range or index out of bounds'
単純に を削除するself.itemTextField.delegate = self
と、そのフィールドに入力したときにアプリがクラッシュすることはなく、titleTextField についても同じことが言えます。
ただし、この点を強調するために、デリゲートとして設定された nameTextField は、クラッシュすることなく引き続き機能します。ただし、デリゲートとして別の textField を追加すると、ここでもクラッシュが発生するようです。
nameTextField の下にオートコンプリート テーブル ビューを提供するのに役立つ次の 2 つのメソッドがあります。これにより、ユーザーが入力したときに、以前に入力した名前 (コア データなどに保存されている) を参照できます。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
self.autoCompleteTableView.hidden = NO;
self.substring = [NSString stringWithString:self.nameTextField.text];
self.substring = [self.substring stringByReplacingCharactersInRange:range withString:string];
NSLog(@"Value of entered string = %@", self.substring);
[self searchAutocompleteEntriesWithSubstring:self.substring];
return YES;
}
どの呼び出し:
- (void)searchAutocompleteEntriesWithSubstring:(NSString *)substring
{
self.autocompleteFetchedResultsController = nil;
[self autocompleteFetchedResultsController];
NSLog(@"Table = %@", self.autoCompleteTableView);
[self.autoCompleteTableView reloadData];
}
このエラーに関連する質問やブログ投稿がたくさんあることは知っていますが、これを解決する方法がよくわかりません。
上記の UITextFieldDelegate メソッドを実装しようとしたときにクラッシュに気付きましたが、viewDidLoad の self.titleTextField.delegate = self でこれをクラッシュさせるのに十分であることがわかりました。self.nameTextField.delegate = self が設定されており、titleTextField と itemTextField に関係なく機能します。
これに光を当てていただければ幸いです!ありがとう、