Отправка сообщения intValue в NSNumber вызывает ошибку «Bad Access» - PullRequest
0 голосов
/ 13 октября 2010

Я пытаюсь получить целочисленное значение 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 ]

5 голосов
/ 13 октября 2010

[floatNum intValue] возвращает тип int, но вы объявили myNum как NSNumber.Объявите myNum как int, и все будет работать как положено.

5 голосов
/ 13 октября 2010

это нормально работает для меня, объявив это так:

NSNumber * floatNum = [NSNumber numberWithFloat:99];
NSLog(@"%d",[floatNum intValue]);
2 голосов
/ 01 февраля 2013

Что вы должны делать, это

myNum = [floatNum integerValue];

потому что integerValue возвращает NSSNumber *

, тогда как intValue возвращает int

...