2012-06-17 46 views
0

這是代碼:
KVC - 有關數據類型

NSNumber *taskId = [[self.taskList objectAtIndex:indexPath.row] valueForKey:@"identity"];  
NSInteger *intTaskId = [[self.taskList objectAtIndex:indexPath.row] valueForKey:@"identity"]; 

self.taskListNSArray其中填充有核心數據取在ViewController中的viewDidLoad方法請求。
taskId是:1
intTaskId是:269303816
在實際上,存儲在覈心數據值爲:1

下面

是我的問題:
1,我感到困惑,爲什麼NSInteger不正確的?
2,我是否必須用NSNumber替換NSInteger以避免其他問題?

回答

3

NSNumber是一個對象,而NSInteger是簡單地爲一個原始的(非對象物)一個typedef型(如int)。 NSInteger而不是NSNumber的子類。核心數據返回數字作爲NSNumber的實例。你會得到奇怪的NSInteger值,因爲它指向的是NSNumber類型的對象,但試圖打印它,就好像它只是一個整數。

您需要將NSInteger替換爲NSNumber以避免任何問題。你也可以使用上NSNumberintValue方法取回一個NSInteger

NSNumber *objTaskId = [[self.taskList objectAtIndex:indexPath.row] valueForKey:@"identity"]; 
NSInteger *intTaskId = [objTaskId intValue]; 

你需要做,如果你想要做的比較(大於,等於過,小於)或算術(你可以不要將NSNumber添加到另一個NSNumberNSNumber到原始類型,如intfloat)。

+0

不總是int: #if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64 typedef long NSInteger; typedef unsigned long NSUInteger; #else typedef int NSInteger; typedef unsigned int NSUInteger; #endif – cdelacroix

+0

(對不起格式不對,代碼未在註釋中進行格式化) – cdelacroix

+0

非常感謝你們,現在我對如何使用NSNumber和NSInteger有了一個想法。 – rock