1

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 を保存したかったためにプレースホルダーを保存したのか、それとも誤ってプレースホルダーと同一の有効な値を保存したのかを知る機会はありません。

4

3 に答える 3

5

ブール値を追加するには [NSNumber numberWithBool:YES/NO] を使用し、nil 値には [NSNull null] を使用します。JSON パーサーを使用している人は、最初に値が何であったか (ブール値または数値) を気にする必要はありません。

于 2012-10-25T16:13:16.353 に答える
2

NSNumberを使用してBOOLもNSNullもカプセル化できない場合、次のオプションは独自のラッパークラスを作成することです。

@interface MyBoolean : NSObject
@property (nonatomic, assign) BOOL boolVal;
@end
于 2012-10-25T16:24:05.383 に答える
0

あなたの質問は少し混乱しているように聞こえます。このブール値を設定するこのパラメーターは何を表していますか? そして、それが数値かブール値かを知る必要があるのはなぜですか?

そのような状況がある場合は、独自のモデルを作成することをお勧めします。

于 2012-10-25T16:10:45.577 に答える