3

我是 iPhone 应用程序的新手。我正在学习如何获取 JSON 数据并对其进行解析并将其显示在 iPhone 的表格中。为此,我正在经历this video

我用 xib 文件做了这个,它工作得很好。

我正在尝试使用Storyboard. 我做了和我做的一样的事情Stoaryboard,但是执行在下一行中断了。

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

我的代码是

-(UITableViewCell *) tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"i m here 1");

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MainCell"];
    NSLog(@"i m here 2");

    if (cell==nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MainCell"];
        NSLog(@"i m here 3");
    }
    NSLog(@"i m here 4");
    cell.textLabel.text = [[news objectAtIndex:indexPath.row] objectForKey:@"title"];
    // cell.textLabel.text = @"dadsf ad";
    NSLog(@"i m here 5");
    return cell;
}

NSLog中,我得到输出直到i m here 4

当我评论cell.textLabel.text = [[news objectAtIndex和取消评论时cell.textLabel.text = @"dadsf ad";,它可以工作并且我dadsf ad在 iPhone 中看到。

// cell.textLabel.text = [[news objectAtIndex:indexPath.row] objectForKey:@"title"];
cell.textLabel.text = @"dadsf ad";

当我运行时cell.textLabel.text = [[news objectAt,我进入屏幕下方。

在此处输入图像描述

笔记:

我也去了模拟器并做了Reset Content and Setting,仍然面临同样的问题。知道为什么吗?


更新 1

我激活NSZombieEnabled并运行代码。我进入 NSLOG 作为

JSONNewsStoryBoard[19389:11303] i m here 4
2013-01-06 11:26:15.327 JSONNewsStoryBoard[19389:11303] *** -[CFArray objectAtIndex:]: message sent to deallocated instance 0x7497040

下面是屏幕截图。

在此处输入图像描述


更新 2 - 答案

我尝试添加NSLog(@"checking news count %d", [news count]);cellForRowAtIndexPath我遇到了同样的问题。手段news为空。

所以我加了

news = [NSJSONSerialization JSONObjectWithData:data options:nil error:nil];

cellForRowAtIndexPath并且它起作用了。:) :)

4

1 回答 1

1

似乎该news对象在调用它之前的某个时间已被释放objectAtIndex:,这可能与界面构建器和情节提要控制您赋予它们的对象的方式有关。尝试在代码中的各个点检查是否news等于。nil您可能必须news在不同的时间点进行实例化。

于 2013-01-06T08:44:53.407 回答