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"]];

请注意,数组中有两个对象,因此您可能也想使用[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 回答