来自 TableViewController 的奇怪值,其中填充了来自 JSON 的数据

Posted

技术标签:

【中文标题】来自 TableViewController 的奇怪值,其中填充了来自 JSON 的数据【英文标题】:Weird value coming from TableViewController which is filled with data from JSON 【发布时间】:2012-11-08 16:47:07 【问题描述】:

今天我遇到了无法复制的错误,这让我很困惑。 好的小背景:

我目前正在开发将标签栏控制器作为初始视图控制器的应用程序。有几个导航控制器连接到不同的标签栏项目。

其中一个是 tableViewController,由 JSON 填充。

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

static NSString *simpleTableIdentifier = @"SimpleTableItem";
   SimpleTableCell *cell = (SimpleTableCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

if (cell == nil)

    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpleTableCell" owner:self options:nil];
    cell = [nib objectAtIndex:0];
   

     //NSMutableArray for storing loaded values
[pics addObject:imageLoad];
[names addObject:[aucdict objectForKey:@"name"]];
[idcka addObject:[aucdict objectForKey:@"auction_id"]];

  // Configure the cell...
cell.nameLabel.text = [aucdict objectForKey:@"name"];
cell.priceLabel.text = [NSString stringWithFormat:@"%@",priceString];
cell.timeLabel.text = [NSString stringWithFormat:@"%@",timeString];

cell.thumbnailImageView.image = imageLoad;



return cell;

点击行后,我执行 performSegueWithIdentifier:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
[self performSegueWithIdentifier:@"showAuctionDetail" sender:self];

在 prepareForSegue 中,我将一些数据发送到下一个 ViewController

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 

namesArray = [[NSArray alloc] initWithArray:names];
picsArray =[[NSArray alloc] initWithArray:pics];
IDarray = [[NSArray alloc] initWithArray:idcka];
if ([segue.identifier isEqualToString:@"showAuctionDetail"])

    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    detailViewController *dViewController = segue.destinationViewController;
    dViewController.selectedAuctionTitle = [namesArray objectAtIndex:indexPath.row];
    dViewController.auctionPic = [picsArray objectAtIndex:indexPath.row];
    dViewController.id_aukcie = [IDarray objectAtIndex:indexPath.row];

现在我的问题来了。有时(这真的让我很困惑,因为我还没有发现它是什么时候发生的)当我启动应用程序并点击某行时,我得到完全不同的数据传递给 DetailViewController。我能猜到的唯一一件事是我的数组与实际的 JSON 响应不同(它们包含更多或更少的值)。但这意味着,如果我点击表格中的第一个或最后一个项目(索引超出范围或类似的东西),我的应用程序会崩溃,这从未发生过。

我已经看到这个错误可能随机发生了 5 次。我尝试连续运行和退出应用程序 20 次,但只发生了一次。

附:我知道类名(detailViewController)应该以大写字母开头,对此我深表歉意:)

已编辑:按照 rdelmar 的建议

【问题讨论】:

【参考方案1】:

我认为问题在于在 cellForRowAtIndexPath: 方法中调用服务器。您应该将该代码放在 viewDidLoad 中,然后当数据返回并完成解析时,在您的表视图上调用 reloadData。

【讨论】:

好吧,我的错误...我已经在 cellForRowAtIndexPath 的 viewDidLoad (发送请求)中这样做了,我只是将 json 响应加载到数组中。对此我深表歉意,我现在要编辑我的问题。 @Yanchi,我无法从您发布的代码中看出您的表中是否有不止一行(因为我根本没有看到您使用 indexPath)。你?如果您有多行,则将数据从 json 移动到字典然后数组的代码将被多次调用。最好在 viewDidLoad 中也这样做。 是的 rdelmar 我有多行...我移动了一段代码,我将数据从 JSON 传输到 Dictionary,然后按照您的建议从 cellForRowAtIndexPath 到 MutableArray 到 viewDidLoad,但是这个错误一直在发生 :( 我也会尝试将加载的值保存到 NSMutableArray,所以稍后当我准备ForSegue 时,我可以发送相关数据做 DetailViewController... 所以我猜这可能是错误的地方 @Yanchi 是的,我想是的。我认为您不应该在 cellForRowAtIndexPath: 方法中向数组中添加内容。

以上是关于来自 TableViewController 的奇怪值,其中填充了来自 JSON 的数据的主要内容,如果未能解决你的问题,请参考以下文章

IOS:来自tableviewcontroller的UITabBarControllerDelegate方法

如何通过来自同一个 TableViewController 的多个 segue 到同一个 ViewController

MATLAB | MATLAB中绘图的奇淫技巧合集

MATLAB | MATLAB中绘图的奇淫技巧合集

php文件自包含的奇淫技巧

Gradle更小更快构建APP的奇淫技巧