2012-05-14 2 views
0

사용자 입력을 데이터베이스 레코드와 비교하는 사용자 지정 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; 
    } 
} 

}

+0

NSRange를 검색 한 후 NSRange를 검색하고 현재 값을 출력하여 반환되는 내용과 텍스트 필드의 텍스트 범위 밖에있는 이유를 확인하는 것이 좋습니다. – pdriegen

+0

어떤 줄에서 오류가 발생합니까? 입력 한 모든 문자에 대해 표시된 코드가 호출됩니까? – strings42

+0

컨트롤 이벤트 UIControlEventEditingChanged에 의해 코드가 시작됩니다. 그래서 예, 입력 한 모든 문자를 다시 호출합니다. – Fortytwo

답변

0

나는 당신이 당신의 키 올바른이 있는지 궁금하네요?

UITextField에는 AFAICT가 공개적으로 정의 된 selectionRange 속성이 없습니다. 그러나 <UITextInput> (UITextField이 해당)은 selectedTextRange 속성을가집니다. 아마도 당신이 의도 한 것일까요? (실제로 실수가 발생했습니다 selectionRange라는 문서화되지 않은 개인 재산이있어 가능하고, 이는 같은 당신이 발견으로 경우에 예상대로 작동하지 않습니다.)

또는 당신이 정말로 의미 않았다 UITextView - selectedRange이있는 - 그래도 여전히 no selectionRange?

별도의 메모에서 서브 클래 싱 UITextField이 여기에 적합한 방법이라고 생각하지 않습니다. 오토 컴플리트는 <UITextFieldDelegate> 메소드를 사용하여 완전히 구현 될 수 있으며, 서브 클래 싱보다는 클래스 구성을 통해 목표를 달성 할 수있을 때마다 매번 컴포지션을 선택해야하는 코코아 프로그래밍의 맥락입니다.

+0

그래, 내가 어쨌든 를 사용하여 rethinking 고려 중이므로, 그냥 거기서 시작됩니다. 의견을 보내 주셔서 감사합니다. – Fortytwo

관련 문제