我正在审核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;
}
答案 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]])