Iphone 我的方法似乎总是返回错误

Iphone 我的方法似乎总是返回错误,iphone,ios,objective-c,arrays,Iphone,Ios,Objective C,Arrays,此方法: - (BOOL)checkForDigits { NSString *editableExpression = self.expression.text; for (int i = 0; i < editableExpression.length; i++){ char charAtPosition = [editableExpression characterAtIndex:i]; for (int c = 0; c < 1

此方法:

- (BOOL)checkForDigits {
    NSString *editableExpression = self.expression.text;
    for (int i = 0; i < editableExpression.length; i++){
        char charAtPosition = [editableExpression characterAtIndex:i];
        for (int c = 0; c < 10; c++ ){
            char digitAtPosition = digits[c];
            if (charAtPosition == digitAtPosition){
                return TRUE;

            }
            else {
                return FALSE;
            }
        }
    }
}
因为

字符位置
包含字母而非数字,如
'1','2',…


返回给定数组位置的字符。

使用NSScanner可能是更好的方法吗

        NSScanner *scanner = [NSScanner scannerWithString:string];
        NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];

        [scanner scanCharactersFromSet:numbers intoString:&obj1String];
        obj1Num = [NSNumber numberWithInt:[obj1String integerValue]];

        if(obj1String) {

        } else {

        }

您的
editableExpression
不是从数字开始的

NSString *editableExpression =@"A1" // return false

NSString *editableExpression =@"1A" // return True  

//This will return TRUE if string contain digit
- (BOOL)checkForDigits {
    NSString *editableExpression = @"1a1";
    for (int i = 0; i < editableExpression.length; i++){
        char charAtPosition = [editableExpression characterAtIndex:i];
        for (int c = 0; c < 10; c++ ){
            char digitAtPosition = digits[c];
            if (charAtPosition == digitAtPosition){
                return TRUE;
            }
        }
    }
    return FALSE;
}
NSString*editableExpression=@“A1”//return false
NSString*editableExpression=@“1A”//返回真值
//如果字符串包含数字,则返回TRUE
-(BOOL)数字支票{
NSString*editableExpression=@“1a1”;
for(int i=0;i
使用以下方法:

- (BOOL)checkForDigits {
    char digits[10] = {'1', '2', '3', '4', '5', '6', '7', '8', '9'};
    BOOL result;
    NSString *editableExpression = @"dsjkdjk12lkv";
    for (int i = 0; i < editableExpression.length; i++){
        char charAtPosition = [editableExpression characterAtIndex:i];
        for (int c = 0; c < 10; c++ ){
            char digitAtPosition = digits[c];
            if (charAtPosition == digitAtPosition){
                NSLog(@"true");
                return TRUE;

            }
            else {
                result = FALSE;
            }
        }
    }
    return result;
}
-(BOOL)检查数字{
字符数字[10]={'1','2','3','4','5','6','7','8','9'};
布尔结果;
NSString*editableExpression=@“dsjkdjk12lkv”;
for(int i=0;i
实际上,它只在第一个循环中返回false。因此,循环仅运行了一个周期。

请尝试以下操作:

NSRange match = [string rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet] options:0 range:NSMakeRange(0, string.length)];
if (match.location == NSNotFound) return NO;
else return YES;
请尝试以下方法:

BOOL containsDigits(NSString *s) {
    NSCharacterSet *cs = [NSCharacterSet characterSetWithCharactersInString:@"123456789"];
    NSRange range = [s rangeOfCharacterFromSet:cs];
    return range.location != NSNotFound;
}
用下面的方法修改它

- (BOOL)checkForDigits {
    NSString *editableExpression = self.expression.text;
    BOOL isDigit = FALSE;
    for (int i = 0; i < editableExpression.length; i++){
        char charAtPosition = [editableExpression characterAtIndex:i];
        for (int c = 0; c < 10; c++ ){
            char digitAtPosition = digits[c];
            if (charAtPosition == digitAtPosition){
                 return TRUE;

            }
        }
    }
    return FALSE;
}
-(BOOL)检查数字{
NSString*editableExpression=self.expression.text;
BOOL-isDigit=FALSE;
for(int i=0;i
使用调试器查找。在方法的开头放置一个断点,并逐步执行,直到找到为止。另一种可能是,您将调用它在nIL指针上,它将始终“返回”NO(不是false,尽管它们是相同的)。该方法只考虑<代码> EdababyExpAs/COD>字符串的第一个字符。它只会告诉您第一个字符是否介于1和9之间。此外,您正在将整数与字符进行比较。是否要检查纯数字、纯字符或字母数字?在这种情况下,它应该为true?顺便说一句,您的数字数组中缺少
'0'
。-并且
isdigit()
检查数字,而不是
isnan()
。这就是为什么我将数字数组设置为字符数组。因为我知道charAtPosition是一个character而不是if,否则你可以放:return(charAtPosition==digitAtPosition)@CW0007007-。。。现在情况越来越糟了。iPatel:除非您想指出
characterAtIndex
返回一个被截断为字符的16位unichar,否则您的答案没有意义。但是,只要输入字符串不包含大于0xFF的字符,这并不重要。-CW0007007:当然,
chars
与==。@iPatel:有500多个答案,你算不上初学者:-)和(对不起!)这个答案对我来说毫无意义。
- (BOOL)checkForDigits {
    NSString *editableExpression = self.expression.text;
    BOOL isDigit = FALSE;
    for (int i = 0; i < editableExpression.length; i++){
        char charAtPosition = [editableExpression characterAtIndex:i];
        for (int c = 0; c < 10; c++ ){
            char digitAtPosition = digits[c];
            if (charAtPosition == digitAtPosition){
                 return TRUE;

            }
        }
    }
    return FALSE;
}