来自 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方法