来自TableViewController的奇怪值,它充满了来自JSON的数据

时间:2012-11-08 16:47:07

标签: ios json uitableview nsarray uistoryboardsegue

今天我遇到了bug,我无法复制,这对我来说非常困惑。 好的小背景:

我正在开发app,它有标签栏控制器作为初始视图控制器。有几个导航控制器连接到不同的标签栏项目。

其中一个是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响应不同(它们包含更多或更少的值)。但这意味着,如果我点击表格中的第一个或最后一个项目(索引越界或类似的东西),我的应用程序会崩溃,这从未发生过。

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

P.S。我知道类名(detailViewController)应该以大写字母开头,我为此道歉:)

编辑:正如rdelmar建议的那样

1 个答案:

答案 0 :(得分:1)

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