将intValue消息发送到NSNumber会导致“错误访问”错误

时间:2010-10-13 09:24:46

标签: objective-c cocoa macos core-foundation

我正在尝试获取使用float初始化的NSNumber的整数值,我期待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 个答案:

答案 0 :(得分:5)

它对我来说很好,这样声明:

NSNumber * floatNum = [NSNumber numberWithFloat:99];
NSLog(@"%d",[floatNum intValue]);

答案 1 :(得分:5)

[floatNum intValue]返回一个int类型,但是你将myNum声明为NSNumber。 将myNum声明为int,一切都按预期工作。

答案 2 :(得分:2)

你应该做的是

myNum = [floatNum integerValue];

因为integerValue返回NSSNumber *

intValue会返回int