Mi método siempre parece devolver FALSE

Este método:

- (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; } } } } 

siempre parece devolver FALSE y no puedo entender por qué. Habría utilizado el método isnan pero lo intenté y no funcionó, así que hice mi propio isnan (realmente lo contrario de isnan). La matriz de dígitos es solo

 char digits[10] = {'1', '2', '3', '4', '5', '6', '7', '8', '9'}; 

Utilizar esta:

 - (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; } 

De hecho, solo devolvía falso en el primer bucle. Entonces, el ciclo se ejecutaba solo para un ciclo.

Porque

charAtPosition contiene una letra y un dígito como '1', '2',......

characterAtIndex Devuelve el carácter en una position de matriz dada.

¿Puede ser la mejor manera de utilizar el NSScanner?

  NSScanner *scanner = [NSScanner scannerWithString:string]; NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"]; [scanner scanCharactersFromSet:numbers intoString:&obj1String]; obj1Num = [NSNumber numberWithInt:[obj1String integerValue]]; if(obj1String) { } else { } 

Su editableExpression no comienza desde el dígito.

 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; } 

Prueba esto:

 NSRange match = [string rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet] options:0 range:NSMakeRange(0, string.length)]; if (match.location == NSNotFound) return NO; else return YES; 

intente esto en su lugar:

 BOOL containsDigits(NSString *s) { NSCharacterSet *cs = [NSCharacterSet characterSetWithCharactersInString:@"123456789"]; NSRange range = [s rangeOfCharacterFromSet:cs]; return range.location != NSNotFound; } 

Modifíquelo a continuación

 - (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; }