Javascript-Object と同様に、ブール値と nil 値を目的の C NSDictionary に格納する必要があります。(この問題は、ユニバーサル JSON パーサーを作成しようとしたときに発生しました) (はい、すぐに使用できる優れたパーサーがいくつかあることは知っていますが、自分で作成してみたかったのです。)
これは私がやりたいことの例です:
NSString* str = @"a string";
NSNumber* num = @123.456;
NSArray* arr = @[@"abc",@99];
boolean boo = true;
id obj = nil;
NSDictionary* dict = @{
@"key1" : str,
@"key2" : num,
@"key3" : arr,
@"key4" : boo, //will not work since boo is not an object
@"key5" : obj //will not work since obj is nil
};
//later in the same piece of code:
dict = @{
@"key1" : str,
@"key2" : num,
@"key3" : arr,
@"key4" : @1, //Here we have the NSNumber 1 assigned to key4
//(which is not the boolean value true)
@"key5" : @"" //an empty NSString-Object (which is not nil)
};
ブール値
1つの解決策は、私がこれを行うことです:
...
@"key4" : [NSNumber numberWithBool:boo];
...
しかし、boo が true の場合、結果は次の場合とまったく同じになります。
...
@"key4" : @1;
...
もしそれが偽なら、それは同じだろう
...
@"key4" : @0;
...
しかし、元の値がブール値か数値かを知る必要があります。
nil と placeholder-object
辞書の値として nil を割り当てる代わりに、空の文字列 (@"")、特定の数値 (-1) などのプレースホルダーを使用できます。しかし、後で、nil を保存したかったためにプレースホルダーを保存したのか、それとも誤ってプレースホルダーと同一の有効な値を保存したのかを知る機会はありません。