Отправка сообщения 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

Другие вопросы по тегам