2012-04-07 23 views
2

これは私がBOOL変数に割り当てるJSONの値であると仮定します。ここではJSONからブール値を取得する方法は?

"retweeted": false 

私はJSONデータを解析する方法である:

NSError *error; 
NSArray *timeline = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableLeaves error:&error]; 

、私は以下のように定義ブールプロパティを持っています:

BOOL *retweeted; 

私のクラスの中。 JSONを解析しながら、私はこれを行うと:

tweet.retweeted = [[[timeline objectAtIndex:i] objectForKey:@"retweeted"] boolValue]; 

を私はこのエラーを取得する:

enter image description here

この問題を解決するためにどのように?

+0

ブール値はBOOL retweetedとして定義する必要があります。 – NeverBe

答えて

13
BOOL *retweeted; 

これは間違っていますが、ブール値はObjective-Cオブジェクトではないスカラーであるため、ポインタとして宣言する必要はありません。代わりに

BOOL retweeted; 

を使用してください。

+0

ありがとうございます。警告は今消えてしまった。しかし、NSLog(@ "%@"、tweet.retweeted)を実行すると、現在は常にNULLになり、YESまたはNOのいずれかになります。 –

+0

@リチャードノップあなたはNSLog(@ "%@"、self.retweeted?@ "YES":@ "NO);で試してみましたか? – Mat

+0

はい、それで幸運です!YES =(BOOL)1とNO =(BOOL)0ですが、NSLogは%@に遭遇したときにオブジェクトを探し、0(= nil、null、NULLなど)なら ' –

7

NSJSONSerializationでシリアル化した後、ブール値はNSNumberとして格納されます。あなたが実際に保管するタイプを見れば__NSCFBooleanですが、それは問題ではありません。 NSNumberは存在しない抽象クラスです。システムは、具体的なクラスで値を保存します。

ので

NSNumber* boolean = [serializedDictionary valueForKey:@"boolValue"];

これはNOYESため@1ため@0を返します。あなたは使用することができます実行してにbooleanValueのとおりです。それを行うの

if(boolean.boolValue){ 
    // ... 
} 
+0

"NSNumberは存在しない抽象クラスです" - それは何ですか?** **存在します... –

+0

私は読んでいますNSNumberは、int型とdouble型の値がオブジェクトのように振る舞うようにするラッパークラスのようなものですが、存在しますが、データをどのように格納するかは、それを初期化する。デバッガを見ると、オブジェクトの初期化方法によって異なるタイプが表示されます。 – doozMen

+0

はい、しかしそれらはすべてサブクラスos 'NSNumber'です。 –

9

私の好ましい方法は次のとおりです。

BOOL success = [[responseObject valueForKey:@"success"] boolValue]

きれい、簡潔でインライン。

+0

これまでのベストアンサー –