Отправка сообщения intValue на номер NSNumber вызывает ошибку "Bad Access"
Я пытаюсь получить целочисленное значение NSNumber, инициализированное с помощью float, и я ожидала, что intValue обработает преобразование (как говорят документы).
#import <Foundation/Foundation.h>
#import "Fraction.h"
#import "Complex.h"
#import "ComplexMathOps.h"
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSNumber *myNum, *floatNum, *intNum;
intNum = [NSNumber numberWithInt:100];
floatNum = [NSNumber numberWithFloat:99];
myNum = [floatNum intValue];
NSLog(@"%@",myNum);
[pool drain];
return 0;
}
Что я делаю неправильно? Как правильно конвертировать разные числовые типы?
3 ответа
Решение
Это прекрасно работает для меня, объявив это так:
NSNumber * floatNum = [NSNumber numberWithFloat:99];
NSLog(@"%d",[floatNum intValue]);
[floatNum intValue] возвращает тип int, но вы объявили myNum как NSNumber. Объявите myNum как int и все работает как положено.
Что вы должны делать, это
myNum = [floatNum integerValue];
так как integerValue
возвращает NSSNumber *
в то время как intValue
возвращает int