2013-05-28 36 views
9

想知道是否有其他人遇到過這種情況,或者如果有原因,我做錯了什麼。將布爾型屬性保存爲NSNumber對象的CoreData實體

我有一個CoreData的應用程序。在模式中,我有一個'內容'實體,其中'unlocked'屬性被設置爲布爾值。

但是當我保存退出obj的C級爲雖然Xcode的實體,content.h內解鎖顯示爲:

@property (nonatomic, retain) NSNumber * unlocked; 

如果我改變它在content.h爲Boolean,我得到一個ARC編譯錯誤。但是,如果我在嘗試獲取NSNumber對象時將其作爲NSNumber對象保留下來,它會不一致地返回(因爲如果我有NSLog打印它,每次運行它都會以不同的值返回)。

我可以找出一個相當明顯的解決辦法,設置解鎖爲NSString爲'是'或'否',並在相關點進行比較,但我想知道是否有人知道爲什麼會發生這種情況,或者如果有辦法將它保留爲布爾值。

在此先感謝。

+2

在Xcode中創建託管對象子類時,您可以選擇*「使用原始數據類型的標量屬性」*,那麼您將獲得'@property(nonatomic)BOOL unlocked;' –

回答

12

CoreData存儲對象,BOOL不是。

[NSNumber numberWithBool:YES]

是設置屬性的方式,你可以通過閱讀mybool使用它= [content.unlocked boolValue]

+6

您也可以使用文字語法來設置布爾型核心數據屬性: 'object.boolAttribute = @ YES' 'object.boolAttribute = @ NO' – lukestringer90

+0

歡呼的解釋。 '[content.unlocked boolValue]'得到它的工作。 – Niazipan

2

布爾值將被存儲在像核心數據NSNumbers(如果你看看你的sqlite的表,你會看到他們存儲爲整數,所以,在轉換到BOOL存儲NSNumber前和轉換NSNumberBOOL(或只是我們作爲-是0/1檢索時)

我從來沒見過然而任何不一致之處, - 如果存儲NSNumber是零,它相當於NO,如果非零,它是YES

+0

認爲我錯誤地投射它之後抓取它,這是造成不一致。歡呼的幫助。 – Niazipan

相關問題