今天我遇到了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建议的那样
答案 0 :(得分:1)
我认为问题是在cellForRowAtIndexPath:方法中调用服务器。您应该将该代码放在viewDidLoad中,然后当数据返回并完成解析时,在表视图上调用reloadData。