2014-01-19 57 views
0

所以我有一個實現NSCoding的NSObject。在我的解碼器方法中,它需要在其他屬性中檢索屬於該類的BOOL。Objective C decodeBoolForKey與BOOL不兼容

-(id)initWithCoder:(NSCoder *)decoder { 
    self = [super init]; 
    if (self) { 
     [self setRandomObject:[decoder decodeObjectForKey:@"randomObjectKey"]]; 
     [self setMyBool:[decoder decodeBoolForKey:@"myBoolKey"]]; 
    } 
    return self; 
} 

然而這將引發上線下面的警告與[self setMyBool ...(黃色警告,仍可以運行)。

Incompatible integer to pointer conversion sending 'BOOL' (aka 'signed char') to parameter of type 'BOOL *' (aka 'signed char *') 

我不明白爲什麼它試圖發送一個布爾指針到布爾。如果有人知道如何解決這個問題,請告訴我!萬分感謝。


此外,這是非常晚,現在,我被耗盡,我可能只是錯過了一些東西簡單,所以請多多包涵。

+0

myBool是屬性嗎? 'setMyBool:'的類型簽名是什麼? –

+0

再次讀取該錯誤消息 - 您將*從* integer(即BOOL)*轉換爲*指向BOOL的指針。 – Caleb

回答

2

你的方法看起來像這樣嗎?

- (void)setMyBool:(BOOL *)value 
or: 
@property BOOL *myBool; 

因爲它應該是:

- (void)setMyBool:(BOOL)value 
or: 
@property BOOL myBool; 
+1

或者,或者屬性聲明使用錯誤的類型。 –

+0

謝謝,我已經更新了我的答案以包含該內容。 –

+0

嗯,我剛剛發現我不小心聲明瞭類型爲「BOOL *'而不是'BOOL'的屬性。你的回答確實有幫助,因爲在閱讀之後,我仔細檢查了財產聲明並注意到了錯誤。謝謝! – WillB

0

所以看起來我意外宣佈的財產爲BOOL *,而不是BOOL。我改變了它,現在一切正常。在閱讀了評論和答案之後,我決定該方法是正確的,然後查看了財產的聲明。非常感謝你,深夜編碼比我想象的要困難。