2011-11-11 54 views
13

我想一個布爾數據庫值保存到圖如下 -如何插入(BOOL *)到的NSMutableDictionary

[recentTags setValue:[NSNumber numberWithBool:[aMessage isSet]] forKey:[aMessage tagName]]; 

它給了我一個錯誤說「不兼容的指針整數轉換髮送BOOL * aka signed char *到'BOOL'又名帶符號的字符'

如何將一個BOOL *插入到字典中?

+0

爲什麼'-isSet'返回'BOOL *'而不是'BOOL'? – 2011-11-21 08:15:00

回答

41

包裹BOOL在NSNumber

NSNumber *boolNumber = [NSNumber numberWithBool:YES]; 

把它弄出來:

BOOL b = [boolNumber boolValue]; 

您可以在NSValue包裹其他非對象類型(諸如指針或結構) 。


編輯:假設你真的是一個BOOL *(指針):

NSValue *boolValue = [NSValue value:pointerToBool withObjCType:@encode(BOOL*)]; 
BOOL *b = [boolValue pointerValue]; 
+0

正如你在我的問題中看到的,我已經這樣做了,但它不適合我。那是當我得到我提到的錯誤。 – Suchi

+0

你確定'[aMessage isSet]'正在返回一個BOOL而不是BOOL *嗎?如果它返回後者,則需要使用'[NSNumber numberWithBool:* [aMessage isSet]]'(儘管您應該首先檢查它是否爲NULL)。 – titaniumdecoy

+2

從Clang v3.1開始,我們可以使用文字:'NSNumber * yesNumber = @YES;'和'NSNumber * noNumber = @NO;',相當於'[NSNumber numberWithBool:YES]'等等 – coco

0

isSet方法需要具備以下特徵:- (BOOL)isSet;

假如是這樣的話,有用titaniumdecoy提到的NSNumber不應該有任何問題。

您的最後一句令我着迷,BOOL *。當然你的意思是BOOL,如果你絕對需要需要一個布爾引用,那麼我建議你將初始/實際BOOL存儲在NSNumber中,並存儲任何你需要它的對象的引用(即你的NSMutableDictionary)。

相關問題