2011-08-12 98 views

回答

3

核心數據將只允許NSNumbers。但是,您可以編寫自定義getter和setter來使用NSInteger屬性。 mogenerator是一個很棒的工具,可以自動爲您執行:它爲您的所有實體生成具有本機屬性的類。

+5

同樣在Xcode的當前版本(4.3.2和此評論中)中,您可以在生成NSManagedObject子類時選中「爲基元數據類型使用標量屬性」 - 這將導致編譯器「只知道」使合成訪問者提升/降級NSNumber和適當的標量。例如,「Integer 32」將在您生成的.h文件中聲明爲int32_t,您可以將整數簡單地分配給代碼中的屬性。 –

2

編號NSInteger只是一個長整型的typedef,而不是一個對象。

實際實現:

#if __LP64__ || NS_BUILD_32_LIKE_64 
    typedef long NSInteger; 
    typedef unsigned long NSUInteger; 
#else 
    typedef int NSInteger; 
    typedef unsigned int NSUInteger; 
#endif 

NSNumber類允許原始類型(intfloat等)轉換成一個對象,然後可將其存儲到屬性列表和核心數據的封裝。

實施例:

float pi = 3.1415; 
NSNumber *piNumber = [NSNumber numberWithFloat:pi]; 

然後,可以方便地訪問和/或轉換存儲在NSNumber對象的值:

int piAsInteger = [piNumber intValue]; 
+0

一個合理的答案 - 但不適用於這個特定的問題。 – Abizern

+0

是的。核心數據只包含*對象*,這就是爲什麼'NSNumber'類是必需的。如果沒有不可靠的第三方實用程序,沒有其他選擇可以與任何更新打破。 –

+1

他問他是否可以跳過NSNumber並使用NSInteger。答案是否定的,因爲您只能將對象存儲在覈心數據中。關於NSNumber如何封裝值的描述是多餘的。如果有人不同意我的觀點,他們可以自由地提出你的答案。 – Abizern