2010-12-05 72 views

回答

39

在某種對稱性與earlier questionNSNumber是對象類型。你需要通過一個方法調用來創建它,如:

[p setAge:[NSNumber numberWithInt:10]]; 

您當前的代碼試圖簡單地在任意整數10轉換爲指針從來沒有這樣做:如果編譯器沒有警告你,你會試圖訪問一些完全不合適的字節在內存位置10就好像它們是一個NSNumber對象,他們不會。做這些東西會導致流淚。

哦,只是爲了搶佔下一個明顯的問題,請記住,如果你想在一個NSNumber對象使用的值,你需要獲得在該通過方法調用的支持,例如:

if ([[p age] intValue] < 18) 
    ... 

NSNumber是不可改變的,而且我覺得實現,使得相同的值映射到相同的對象,所以它可能是可能逃脫爲NSNumber對象之間的值相等指針直接比較,但請不要,因爲這將不適當地依賴實現細節。使用isEqual代替)

+1

感謝您期待下一期:) – 2010-12-05 13:42:34

6

使用此:

[p setAge:[NSNumber numberWithInt:10]]; 

您不能將像10這樣的整數文字轉換爲NSNumber*(指向NSNumber的指針)。

+0

感謝你能也說不清爲什麼,因爲鑄造應該在C喜歡的工作,我可以在這裏閱讀http://stackoverflow.com/questions/690748/how-to-cast-an-object-in-objective-c – 2010-12-05 13:22:12

+0

只能在10分鐘內接受答案stackoverflow說:) – 2010-12-05 13:22:42

4

因爲NSNumber是原始整數類型中的對象和「10」,非常類似於Java中int和Integer之間的區別。因此,您需要調用它的初始化器:

[p setAge:[NSNumber numberWithInt:10] 
4
NSNumber *yourNumber = [NSNumber numberWithInt:your_int_variable]; 
22

今天,它也可以使用速記符號它做的事:

[p setAge:@(10)];