自动填充UITextField会崩溃应用程序

时间:2012-05-14 17:48:39

标签: ios 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;
    }
}

}

1 个答案:

答案 0 :(得分:0)

我想知道你的密钥是否正确?

UITextField没有selectionRange属性公开定义的AFAICT。但是,<UITextInput>符合的UITextField - 具有selectedTextRange属性。这可能是你的意图吗? (可能有一个实际上被称为selectionRange的无证私有财产,你偶然遇到过,并且在你遇到的情况下表现不正常。)

或者,你的意思是UITextView - 有一个selectedRange - 但仍然没有selectionRange吗?

另外,我不认为子类化UITextField是正确的方法。自动完成可以完全(没有双关语)使用<UITextFieldDelegate>方法实现,并且它是Cocoa编程的格言,当你可以通过类组合而不是子类化来完成目标时,你应该每次都选择组合。