2011-08-24 36 views
24

espero para comprobar el tipo de un objeto, por NSString:Comprobar si un objeto es NSInteger

[theObject isKindOfClass:[NSString class]] 

funciona, pero para NSInteger

[theObject isKindOfClass:[NSInteger class]] 

a informar de errores

Bienvenido cualquier comentario

Respuesta

51

Use la clase NSNumber:

if ([obj isKindOfClass:[NSNumber class]]) { ... } 

NSNumber hereda de NSValue: NSObject

NSInteger sirve para designar un número entero.

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64 
typedef long NSInteger; 
#else 
typedef int NSInteger; 
#endif 
11

NSInteger no es una clase Objective-C. Es un typedef para un tipo integral. Como tal, un objeto nunca será un NSInteger.

Lo que estás buscando es la clase NSNumber, que es una clase Objective-C.

0
//checked 
+ (BOOL)CGFloatIsCanNSInteger:(CGFloat)floatValue inAccuracy:(NSString*)accuracy { 
    NSString *strFloat = [NSString stringWithFormat:accuracy, floatValue]; 
    NSRange dotRange = [strFloat rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:@"."]]; 
    NSUInteger dotLocation = dotRange.location + 1; 
    NSString *subStrFromDot = [strFloat substringFromIndex:dotLocation]; 
    NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"123456789"]; 
    for (int i = 0; i < [subStrFromDot length]; i++) { 
     unichar c = [subStrFromDot characterAtIndex:i]; 
     if ([myCharSet characterIsMember:c]) { 
      return NO; 
     } 
    } 
    return YES; 
} 
//checked 
+0

Debe usar la etiqueta de código para formatear esto correctamente :) – bkbeachlabs

Cuestiones relacionadas