从NSDictionary填写tableview

时间:2013-07-29 19:24:21

标签: iphone ios objective-c

我试图用NSDictionary填充动态tableview的单元格我相信,这是填充tableview的方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    ResultsCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    NSData *jsonData = self.responseFromServer;

    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:nil];
    NSArray *results = [json objectForKey:@"myData"];
    for (NSDictionary *item in results) {
        cell.title.text =[[item objectForKey:@"title"]objectAtIndex:indexPath.row];
    }
    // Configure the cell...

    return cell;
}

如果我有

cell.title.text =[item objectForKey:@"title"];

几乎可以,但我的所有标题都是一样的。但是目前我是如何得到错误的:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString objectAtIndex:]: unrecognized selector sent to instance 0x7612940'

并且我不确定它意味着什么或如何解决它。

1 个答案:

答案 0 :(得分:2)

看起来你的词典实际上是一个字典数组,每个字典都有一个键@“Title”。

您现在正在做的是获取每个元素的String并尝试获取indexPath.row的索引,但字符串没有该方法。

由于您只需索引indexPath.row处的对象,因此可以使用以下代码行替换整个for循环:

 cell.title.text = [[results objectAtIndex:indexPath.row] objectForKey:@"title"];

另外,正如尼古拉斯·哈特所说,为了提高性能,你应该在接收到json对象时在代码中添加以下行,这样它只进行一次,并使结果成为可以是的实例变量从tableView的委托方法访问:

NSData *jsonData = self.responseFromServer;

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:nil];
NSArray *results = [json objectForKey:@"myData"];