我創建了一個自定義的UITextField,用於比較用戶輸入和數據庫記錄。一切都很好,直到用戶在我已經建議了一些東西之後在文本字段中放置一個空格。它崩潰以下消息的應用程序:自動完成UITextField崩潰應用程序
終止應用程序由於未捕獲的異常「NSRangeException」,原因:「* - [__ NSCFConstantString substringToIndex:]:範圍或索引超出範圍」
這裏是代碼:
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並輸出當前值以確定它返回的原因以及它爲什麼在文本字段中的文本邊界之外添加一個NSLog .. – pdriegen
哪條線拋出錯誤?您輸入的每個字符都會顯示您所顯示的代碼嗎? – strings42
代碼由控件事件UIControlEventEditingChanged觸發。所以,每個輸入的字符都會再次調用它。 – Fortytwo