获取JSON子类别元素问题

时间:2015-01-27 19:15:49

标签: ios nsarray nsdictionary

我正在审核JSON数据,并且我使用sub_category和其他没有=0的其他类别名称。我可以获取类别名称并且工作正常,但我无法获得name中的sub_category,当我调用_arraySubCategory时出现崩溃错误:{{1 }}

我称这种方法是对的吗?我的问题在哪里?

reason: '-[__NSCFArray objectForKey:]: unrecognized selector sent to instance

JSON数据:

- (IBAction)getData:(id)sender {

NSString *string = BaseURLString;
NSURL *url = [NSURL URLWithString:string];
NSURLRequest *request = [NSURLRequest requestWithURL:url];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

    _dic  = (NSDictionary *)responseObject;

    NSLog(@"Data %@", _dic);

    for (NSDictionary *dict in [_dic objectForKey:@"categories"]) {

        [_arrayName addObject:[dict objectForKey:@"name"]];

        _dicSubCategory = [dict objectForKey:@"sub_category"];

        [_arraySubCategory addObject:[_dicSubCategory objectForKey:@"name"]]; //Crashing

        NSLog(@"%@", _dicSubCategory);
    }


} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    NSLog("No Connection")

  }];

    [operation start];   
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [_arrayName count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"SimpleTableCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:simpleTableIdentifier];
}

    cell.textLabel.text = [NSString stringWithFormat:@"%@", [_arrayName objectAtIndex:indexPath.row]];

return cell;
}

1 个答案:

答案 0 :(得分:0)

(标志着NSArray的开始。如果您查看原始JSON,那将是[个字符。您需要索引数组,而不是按键访问它。

这意味着_dicSubCategory不是字典,无论变量是如何声明的。变量的类型(大多数)是无关紧要的 - 重要的是变量所对应的对象的类型,这是一个数组。它是一个数组,因为" sub_category"是一个数组(可以通过(字符看到)。

如果你有一个标有" dog"并且把一只猫放进去,猫不会变成狗。

this class is not key value coding-compliant for the key name.

与"无法识别的选择器"基本相同的错误,只是不同。 " sub_category"的零值作为NSNumber出现,你必须测试从提取" sub_category"中返回的值的类型。看它是NSNumber还是NSArray。您可以使用例如:

测试类型
if ([theSubCategoryValue isKindOfClass:[NSNumber class]])