2010-10-13 24 views
0

我試圖獲得用浮點數初始化的NSNumber的整數值,並期望intValue處理轉換(如文檔所述)。將intValue消息發送到NSNumber會導致「訪問錯誤」錯誤

#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; 
} 

我在做什麼錯?什麼是在不同的數字類型之間轉換的正確方法?

+1

他們全部局部變量或屬性? – willcodejavaforfood 2010-10-13 09:32:14

+0

局部變量。 – cfischer 2010-10-13 09:39:31

+0

如何聲明intNum,floatNum和myNum? – taskinoor 2010-10-13 09:52:30

回答

5

它工作正常,我宣佈這樣的:

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

出於某種原因,我期待intValue返回一個NSNumber包裝int而不是int。這就是我陷入困境...... O :-)謝謝! – cfischer 2010-10-13 10:02:23

+0

歡迎大家:) – JonLOo 2010-10-13 10:05:02

5

[floatNum的intValue]返回一個int型,但你申報的myNum爲NSNumber的。 將myNum聲明爲int,並且所有內容都按預期工作。

+0

費爾南多:你也應該從編譯器得到關於這個的警告(沿着「賦值將整數轉換爲指針而不用轉換」的行)。不要忽略構建結果中的警告 - 編譯器指出你做錯了什麼。將'myNum'聲明爲'intValue'返回的相同類型將解決警告並解決問題。 – 2010-10-14 08:21:47

2

你應該做的是

myNum = [floatNum integerValue]; 

因爲integerValue返回NSSNumber *

intValue返回int

+2

'integerValue'返回一個'NSInteger' – trapper 2016-12-07 07:02:55