2013-01-24 36 views
0

我正在開發iOS6並使用Xcode 4.5.2。向BOOL指針賦值時奇怪的警告問題

我有一個UIViewController,假設它的名字是aViewController。在這UIViewController,我有一個布爾指針聲明爲使用此代碼屬性。實際上,這不是我已經實現的一段代碼,所以我不知道爲什麼使用BOOL指針

現在,值分配給該BOOL指針的時候,我因爲在我的情況下,BOOL指向一個布爾變量得到了這個著名的警告Incompatible integer to pointer conversion assigning to 'BOOL *' (aka 'signed char *') from 'signed char'這是完全可以理解的。

要解決這個問題,我已經試過this one。所以我的代碼是這樣的:

aViewController.aBoolPointer = YES; 

然後,我試過,

aViewController.(*aBoolPointer) = YES; 

由於Objective-C的是一個超級一套C,我記得在C .*表示法等於->。並且上述符號給出錯誤。錯誤描述:標識符預計

如果我改變的代碼是這樣的:

aViewController->aBoolPointer = YES ; 

我得到這個錯誤實例變量aBoolPointer保護

這裏是奇怪的問題,如果我使用此代碼

aViewController.aBoolPointer = NO ; 

然後,我沒有得到警告。

所以我的問題是:

- 爲什麼我沒有得到警告,當我NO值賦給一個BOOL指針

- 如何我可以正確地分配YESBOOL指針

- 什麼是通過考慮我解釋的步驟YESNO之間的差異?

謝謝大家。

+1

你爲什麼要'BOOL *'?我敢打賭,你只需要一個'BOOL'屬性。你會感到困惑,因爲Obj-C中的所有對象都是指針,並且你假定原始屬性也需要指針。 – trojanfoe

+0

我已經在問題中解釋過了,我沒有寫這段代碼,我已經知道使用BOOL *通常是無用的,如果你看到這個問題鏈接,我已經解釋了BOOL *沒有必要。但是,這是我面對的非常奇怪的問題。這就是爲什麼我問爲什麼會發生這種情況 – limon

+0

Downvoters:你有什麼理由!!!!!如果你有,歡迎你評論。 – limon

回答

3

1爲什麼我沒有警告,當我分配NO值BOOL指針?

由於NO相同0,或NULL,所以它像分配NULL到指針,如:

BOOL *p = NULL; 

2我怎樣才能正確地分配YES值bool指針?

如果屬性被定義爲:

@property(assign, nonatomic) BOOL *boolp; 

然後:

BOOL b = YES; 
obj.boolp = &b; 

3這是考慮到我說明的步驟是或否通過之間的差異?

我不明白這個問題。

+0

你是否將指針分配給伊娃? –

+0

這取決於在哪裏申報'b'。它可以在任何地方使用相同的機制。使用'BOOL *'是沒有意義的,很少做,所以它並不重要。它需要儘快下降。 – trojanfoe

+0

現在都清楚了,第三個問題在第一個答案中解釋。謝謝。 – limon

0

BOOL指針只是指針像其他人一樣

if (aViewController.aBoolPointer != NULL) 
    *(aViewController.aBoolPointer) = YES; 

不過,我不知道爲什麼一個屬性將使用BOOL指針類型。你在使用一些第三方框架嗎?你最好檢查他們的文檔或詢問作者。

+0

那真的不行;這意味着'aBoolPointer'必須通過做類似'aBoolPointer = malloc(sizeof(BOOL))'或類似的東西來初始化? – trojanfoe

+0

取決於。該對象可能已經爲你準備了內存(它應該)。你真的需要檢查文檔或詢問作者。 –

+0

我沒有初始化aBoolPointer – limon