사용자 입력을 데이터베이스 레코드와 비교하는 사용자 지정 UITextField를 만들었습니다. 이미 뭔가 제안한 후에 사용자가 텍스트 필드에 공백을 넣을 때까지 모든 것이 잘 작동합니다. 여기자동 완성 UITextField가 응용 프로그램과 충돌 함
- '아웃 오브 바운드 범위 또는 인덱스 [__ NSCFConstantString substringToIndex :] * :'는 인해 캐치되지 않는 예외 'NSRangeException', 이유에
응용 프로그램을 종료에는 다음과 같은 메시지와 함께 응용 프로그램 충돌 코드 :
NSRange cursorRange = [[self valueForKey:@"selectionRange"] rangeValue];
NSString *entered = [self.text substringToIndex:cursorRange.location];
if (![self.text isEqualToString:entered]) {
self.text = entered;
return;
}
NSString *suggestedSuffix;
for (NSString *name in filterData) {
if (name.length > cursorRange.location && [[name lowercaseString] hasPrefix:entered]) {
suggestedSuffix = [name substringFromIndex:cursorRange.location];
NSMutableString *suggestedString = [[NSMutableString alloc] initWithString:entered];
[suggestedString appendString:suggestedSuffix];
self.text = suggestedString;
[self setValue:[NSValue valueWithRange:cursorRange] forKey:@"selectionRange"];
return;
}
}
}
NSRange를 검색 한 후 NSRange를 검색하고 현재 값을 출력하여 반환되는 내용과 텍스트 필드의 텍스트 범위 밖에있는 이유를 확인하는 것이 좋습니다. – pdriegen
어떤 줄에서 오류가 발생합니까? 입력 한 모든 문자에 대해 표시된 코드가 호출됩니까? – strings42
컨트롤 이벤트 UIControlEventEditingChanged에 의해 코드가 시작됩니다. 그래서 예, 입력 한 모든 문자를 다시 호출합니다. – Fortytwo