1

私は現在このJSONを解析しようとしています

[{"id":"1","dish_name":"Pasta & ketchup","category":"main","rating":"5","rating_count":null,"author":"Me","ingredients":"Pasta\nKetchup\nWater","description":"Very good for students\nCheap too!","picture":null,"protein":"7","fat":"11","carbs":"12","calories":"244","developer_lock":"1"},{"id":"2","dish_name":"Pasta & Kødsovs","category":"main","rating":"5","rating_count":null,"author":"Me","ingredients":"Pasta\nKødsovs\nWater","description":"Very good for students\nCheap too!","picture":null,"protein":"7","fat":"11","carbs":"12","calories":"244","developer_lock":"1"}]

しかし、それは失敗し、このコードでクラッシュします

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    [connection release];
    NSError *error = NULL;

    NSDictionary* json = [NSJSONSerialization
                      JSONObjectWithData:responseData
                      options:kNilOptions
                      error:&error];
    recipes = [[NSArray alloc] initWithArray:[json objectForKey:@"dish_name"]];
    [uit reloadData];
}

誰かが何か手がかりを持っていますか、なぜそれがエラーでクラッシュするの-[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x8077240 ですか?

前もって感謝します。

4

2 に答える 2

2

で始まるエラー メッセージ[__NSCFArray objectForKey:]は、NSArray (JSON のルート オブジェクトは配列です。左角かっこと右角かっこに注意してください) があり、それを辞書として処理しようとしていることを意味します。概して、

recipes = [[NSArray alloc] initWithObject:[json objectForKey:@"dish_name"]];

する必要があります

recipes = [[NSArray alloc] initWithObject:[[json objectAtIndex:0] objectForKey:@"dish_name"]];

配列には 2 つのオブジェクトがあることに注意してください[json objectAtIndex:1]。同様に使用することもできます。

編集:動的な数のレシピがある場合、これを行うことができます:

recipes = [[NSMutableArray alloc] init];
for (NSDictionary *dict in json) {
    [recipes addObject:[dict objectForKey:@"dish_name"]];
}
于 2012-11-17T17:34:33.960 に答える
1

jsonNSDictionary が実際の有効な NSDictionary オブジェクトである場合、これへの呼び出し:

[json objectForKey:@"dish_name"]

正確にこれを返す必要があります:

"Pasta & ketchup"

これは間違いなく配列ではありません。これは NSString オブジェクトです。

これが、" " への呼び出しinitWithArrayが爆撃である理由です。

于 2012-11-17T17:28:46.457 に答える