2011-11-11 17 views
13

私は次のようにマップにブールデータベース値を保存しようとしていますに(BOOL *)を挿入する方法 - それは私に互換性のないポインタがBOOLを送信し、変換を整数に」というエラーを与えるNSMutableDictionary

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

* aka signed char * to 'BOOL' aka signed char "

BOOL *を辞書に挿入するにはどうすればよいですか?

+0

なぜ '-isSet'は' BOOL'ではなく 'BOOL *'を返しますか? –

答えて

41

ラップBOOL NSNumberに:

NSNumber *boolNumber = [NSNumber numberWithBool:YES]; 

それを取得するには:

BOOL b = [boolNumber boolValue]; 

あなたはNSValueに(例えば、ポインタや構造体など)他の非オブジェクト型をラップすることができます。


EDIT:あなたは本当に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)を保存することをおすすめします。

関連する問題