UITableView中的JSON提要错误

时间:2013-08-18 09:25:47

标签: ios objective-c json uitableview cocoa-touch

我正在尝试从Instagram获取JSON提要以在我的UITableView中显示数据。但是我收到以下错误,我无法弄清楚问题是什么:

  

2013-08-18 10:20:37.361 ttoauth [38213:c07] - [__ NSCFDictionary objectAtIndex:]:无法识别的选择器发送到实例0x75d7480
  2013-08-18 10:20:37.362 ttoauth [38213:c07] ***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [__ NSCFDictionary objectAtIndex:]:无法识别的选择器发送到实例0x75d7480'
  ***第一次抛出调用堆栈:   (0x13c8012 0x11ede7e 0x14534bd 0x13b7bbc 0x13b794e 0x3f68 0x1ec8fb 0x1ec9cf 0x1d51bb 0x1e5b4b 0x1822dd 0x12016b0 0x26abfc0 0x26a033c 0x26a0150 0x261e0bc 0x261f227 0x261f8e2 0x1390afe 0x1390a3d 0x136e7c2 0x136df44 0x136de1b 0x22c57e3 0x22c5668 0x131ffc 0x2a4d 0x2975)   libc ++ abi.dylib:terminate调用抛出异常

这是我的代码:

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    return [jsonResults count];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


static NSString *CellIdentifier = @"Cell";
CustomCell *cell = (CustomCell *)[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
    cell = [nib objectAtIndex:0];
}


NSDictionary *instafeed_tableview = [jsonResults objectAtIndex:indexPath.row];
NSString *username_label = [[instafeed_tableview objectForKey:@"from"] valueForKey:@"username"];

cell.username.text = [NSString stringWithFormat:@"%@", username_label];
cell.username.clipsToBounds = YES;
cell.contentView.clipsToBounds = NO;

return cell;
}

-(NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

-(CGFloat)tableView :(UITableView *)tableView heightForRowAtIndexPath :(NSIndexPath *)indexPath {
    return 191;
}

我做错了什么?

1 个答案:

答案 0 :(得分:0)

reason: '-[__NSCFDictionary objectAtIndex:]: unrecognized selector sent to instance 0x75d7480

此行告诉您使用objectAtIndexNSArray方法)NSDictionary。由于您收到的内容为NSDictionary,因此您希望将其用作NSArray

可能你的错误行是:

NSDictionary *instafeed_tableview = [jsonResults objectAtIndex:indexPath.row];

尝试调试它。我认为您的jsonResults NSDictionary不是NSArray

在此行和输出类型中添加断点:po [jsonResults class];

根据评论编辑

你错了。这不是你从JSON设置你想要的数据类型的人。 JSON结构决定了这一点。例如:

[
   { "firstName":"John" , "lastName":"Doe" }, 
   { "firstName":"Anna" , "lastName":"Smith" }, 
   { "firstName":"Peter" , "lastName":"Jones" }
]

此示例中的NSArray包含NSDictionaries

{ 
  "name":"John" ,
  "surname":"Doe"
},

这将返回单NSDictionary

[]和此{}括号确定您要处理的对象。