2010-05-03 132 views
1

我有下面的代碼行中的我的Objective-C的方法之一:指針和整數錯誤的比較

if (self.rule.sunday == YES) { do some stuff... } 

線產生以下編譯器警告:

Comparison between pointer and integer 

這是隻是一個警告,所以它不是威脅生命的事情,但它讓我感到瘋狂。很明顯,我缺少一些關於整數,指針和/或布爾值的基本概念。有人可以請啓發我,以便我可以修復我的代碼?

像往常一樣,在此先感謝您的幫助。

UPDATE:爲了參考,將校正代碼看起來是這樣的:

if ([self.rule.sunday boolValue] == YES) { do some stuf... } 
+2

'self.rule.sunday'是一個指針嗎? – 2010-05-03 15:26:33

+0

如果是,則表示設計中有可怕的錯誤。也許在實施過程中。 – 2010-05-03 15:30:08

回答

2

self.rule.sunday被返回對象引用。 YES不是一個對象,它是一個unsigned char。所以你要比較一個對象引用(即內存地址)到1。當然,它會抱怨你。

+0

好的......但如果被引用的對象是一個布爾值,那麼您爲了決策目的應該如何比較它呢?我正在拍攝的構造是,「如果規則實體的布爾'星期日'屬性被稱爲'規則'是'是',那麼做一些事情。」 – Andy 2010-05-03 16:36:53

+0

@安迪不存在布爾對象(除非你創建了一個)。 BOOL通常包裹在'NSNumber'對象中,所以在這種情況下,你可以使用'-boolValue'來提取'BOOL'。但更好的問題是:你如何在'rule'類型聲明'sunday'屬性? – 2010-05-03 16:49:17

+0

我正在使用核心數據來管理對象; 「星期日」屬性被標記爲「布爾」。 當我在等待時,我遇到了NSNumber類的引用和-boolValue和+ numberWithBool方法。用有問題的代替這些代碼來處理所有的編譯器警告,並消除了我還沒有開始工作的另一個錯誤。 謝謝你向正確的方向推動,戴夫。 – Andy 2010-05-03 16:54:49

相關問題