我有一个文本框,&使用shouldChangeCharactersInRange
方法来获取值。NSRange`replaceCharactersInRange`在退格和输入新字符后崩溃的应用程序
这里是我的代码:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSLog(@"Pressing : %@\n", string);
NSMutableString *text = [NSMutableString stringWithString:textField.text];
NSLog(@"length: %lu", (unsigned long)range.length);
NSLog(@"location: %lu\n", (unsigned long)range.location);
NSLog(@"before text: %@", textField.text);
[text replaceCharactersInRange:range withString:string];
NSLog(@"After replacement , Text: %@\n\n", text);
// My work..
return YES;
}
我先加字符 'T' 到文本框,它工作正常..
2016-03-02 10:06:23.162 MyTextFieldApp[12006:4323645] Pressing : T
2016-03-02 10:06:23.163 MyTextFieldApp[12006:4323645] length: 0
2016-03-02 10:06:23.163 MyTextFieldApp[12006:4323645] location: 0
2016-03-02 10:06:23.163 MyTextFieldApp[12006:4323645] before text:
2016-03-02 10:06:23.163 MyTextFieldApp[12006:4323645] After replacement , Text: T
然后,我就退格删除字符,这也适用很好..
2016-03-02 10:06:30.979 MyTextFieldApp[12006:4323645] Pressing :
2016-03-02 10:06:30.980 MyTextFieldApp[12006:4323645] length: 1
2016-03-02 10:06:30.980 MyTextFieldApp[12006:4323645] location: 0
2016-03-02 10:06:30.980 MyTextFieldApp[12006:4323645] before text: T
2016-03-02 10:06:30.981 MyTextFieldApp[12006:4323645] After replacement , Text:
但是,当我要添加新字符,然后,它崩溃在replaceString ..
注意:此时间,范围给出长度为0 &位置1,而第一次也当我加入吨至空文本框,它给出一个长度为0以及位置0
2016-03-02 10:07:02.158 MyTextFieldApp[12006:4323645] Pressing : T
2016-03-02 10:07:02.158 MyTextFieldApp[12006:4323645] length: 0
2016-03-02 10:07:02.159 MyTextFieldApp[12006:4323645] location: 1
2016-03-02 10:07:02.159 MyTextFieldApp[12006:4323645] before text:
2016-03-02 10:07:02.159 MyTextFieldApp[12006:4323645] *** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFString replaceCharactersInRange:withString:]: Range or index out of bounds'
我无法检测到问题在哪里?
你明白吗,为什么我要获得位置1?这是我没有得到.. – Simmy
我不知道,你的程序或其他东西是错误的字段中键入。我写了完全相同的程序,只是为了明智地检查UITextField是否做得正确,并且从我的输出中可以看到,我得到的范围都很好。 – par