2

サーバーからの JSON 応答があり、1=true、0=false の形式の bool 変数があります。

私のコードでは、これを行います:

私の最初の試み:

NSString *bolean=[dict objectForKey:@"featured"];
    if ([bolean isEqualToString:@"1"]) // here application fails...
    {
        BOOL *a=[bolean boolValue];
        [newPasaka setFeatured:a];
    }
    else
    {
        BOOL *a=[bolean boolValue];
        [newPasaka setFeatured:a];
    }

私の2回目の試み:

ここでは、1 = NO、0 = NULL と考えています。

NSString *bolean=[dict objectForKey:@"featured"];
    if ([bolean boolValue]) //if true (1)
    {
        BOOL *a=[bolean boolValue];
        [newPasaka setFeatured:a];
    }
    else //if false (0)
    {
        BOOL *a=[bolean boolValue];
        [newPasaka setFeatured:a];
    }

これを回避するには?

そして、私のクラスもこのクレイジーを処理します.. setFeatured をYES- に設定すると、NO. 設定するNOと-設定されますnull.

これが私のクラスです:

*.h

@property BOOL *featured;

*.m

@synthesize featured;
4

5 に答える 5

3

BOOL はクラスではなく、プリミティブ型です

BOOL a = [bolean boolValue];

いいえ

BOOL *a = [bolean boolValue]; // this is wront

とにかくJSONでは、扱っているAPIがその値を強制的に文字列にしない限り、その値は文字列ではなく数値として表現する必要があります。objectForKey の後にブレークポイントを配置し、コンソールに「ブール値」オブジェクトのクラスを出力します。

po [bolean class]

そのため、扱っているオブジェクトの種類を確認し、数値の場合は (当然のことながら) [boolean boolValue] を使用します。

于 2013-10-24T13:35:54.620 に答える
0

BOOL is primitive type, so you need not to use pointer with it.

Change this property from

@property BOOL *featured;

to

@property BOOL featured;

Then you need to replace this code:

NSString *bolean=[dict objectForKey:@"featured"];
    if ([bolean isEqualToString:@"1"]) // here application fails...
    {
        BOOL *a=[bolean boolValue];
        [newPasaka setFeatured:a];
    }
    else
    {
        BOOL *a=[bolean boolValue];
        [newPasaka setFeatured:a];
    }

with this:

NSString *bolean=[dict objectForKey:@"featured"];
[newPasaka setFeatured:[boolean boolValue]]

It is greatly simplified and works fine

于 2013-10-24T13:45:16.783 に答える