Если вы хотите, чтобы ваш NSNumber содержал целочисленное значение, вы должны использовать [NSNumber numberWithInt:]
:
NSNumber *myNumber = [NSNumber numberWithInt:[tmpId intValue]];
Вам также следует убедиться, что ваша строка NSString содержит допустимое целое значение:
NSScanner* scan = [NSScanner scannerWithString:tmpId];
int isInt;
if ( [scan scanInt:&isInt] && isInt ) {
NSLog(@"value is an integer: %i",isInt);
}
Но есть одна загвоздка:
NSScanner
проверяет число внутри строки как целое число, даже если оно не должно ... Все процессоры ARM являются только 32-разрядными, поэтому максимальный диапазон значений unsigned int
составляет от 0
до 4294967295
.
Таким образом, использование NSNumberFormatter
- это самый безопасный способ получить правильное значение, поскольку он позволяет найти правильный тип данных для вас:
NSString *tmpId = @"3033547640189791162";
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *myNumber = [f numberFromString:tmpId];