关于textfield中校验字符串的代理方法的崩溃问题
我们在需要限制一个输入框只输入数字的时候,一般会采用一下方法
-
(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if (range.length == 0) {
NSLog(@“不存在这里”);
}
if (range.location >= 11){ //限制位数.return NO;
}else{//限制只能输入数字
return [self validateNumber:string];
}
} -
(BOOL)validateNumber:(NSString*)number {
BOOL res = YES;
NSCharacterSet* tmpSet = [NSCharacterSet characterSetWithCharactersInString:@“0123456789”];
int i = 0;
while (i < number.length) {
NSString * string = [number substringWithRange:NSMakeRange(i, 1)];
NSRange range = [string rangeOfCharacterFromSet:tmpSet];
if (range.length == 0) {
res = NO;
break;
}
i++;
}
return res;
}
但是我们在将上面代码运行的时候一般情况下会出现一个
Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
的线程错误,这是因为我们没有对rang进行判断,所以我在开头加上一句
if (range.length == 0) {
NSLog(@“不存在这里”);
}
之后,这个崩溃就被解决了。