我有一个视图控制器,令人讨厌地不断崩溃。文本字段有 3 个文本字段(名称、项目、标题),在我尝试引入 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 下提供一个自动完成的表格视图,因此当用户输入时,他们可以引用以前输入的名称(存储在 Core Data 等中)。
- (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 是什么都有效。
任何对此的解释将不胜感激!谢谢,