我有一个iPhone应用程序,可以从.csv文件中读取本地商家的详细信息。主要有3个部分:
根据点击的是哪一个(例如,在哪里睡觉),您将获得以下选项的子部分:
然后,如果您选择例如酒店,您将看到酒店列表的UITableView。 UITableView有2个部分,以区分三星级和四星级酒店。见下面的屏幕抓取。
到目前为止,这一切都还可以,但是当我点击一个单元格以查看业务的详细信息页面(UIViewController)时,我发现了错误的单元格信息。
我已经在UITableViewController的didSelectRowAtIndexPath中遍历了代码,看起来我正在每个单元格上注册正确的选择。
例如,在上面的图片中,如果我选择Ballyroe Heights Hotel,这是我通过它时得到的输出。其中dataArray()是一个NSMutableArray,它包含一个3星级的NSMutableArray和一个4星级酒店的NSMutableArray,如下所示。
[dataArray addObject:threeStarArray];
[dataArray addObject:fourStarArray];
但是,点击Ballyroe Heights Hotel酒店可以看到Ballygarry House Hotel and Spa的详细信息
可能发生的事情的一个线索是在购物部分。下面是购物视图和部分的屏幕截图。
点击Manor West Retail Park显示正确的信息。但点击Shaws Department Store再次显示Manor West Retail Park。然后点击Thats Perfect显示Shaws百货商店 - 点击Sean Hussey显示Thats Perfect细节。每个部分都会重复此操作。
点击硬件(Kellihers ...)再次在Manor West零售公园为显示屏加注星标。
但是再次单步执行它,似乎在didSelectRowAtIndexPath()中选择了正确的单元格。
在下面的示例中,我选择了Sean Hussey,输出显示选择了正确的单元格,并且segue发送者:selectedCell是Sean Hussey对象。
但是,传递给UIViewController的对象是Thats Perfect。 任何人都可以看到我错在哪里?可以提供附加代码,但我确定问题必须在这里,因为此方法检查行选择并执行segues。
答案 0 :(得分:1)
您使用错误的API发送数据。使用prepareForSegue而不是performSegue传递数据
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self performSegueWithIdentifier:@"mySegueId" sender:self]; }-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSLog(@"prepareForSegue: %@", segue.identifier ); NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];if ([segue.identifier isEqualToString:@"mySegueId"] && indexPath) { NSArray *selectedRowArray = [dataArray objectAtIndex:indexpath.section]; BusinessDetailContent *selectedContent = [selectedRowArray objectAtIndex:indexpath.row]; BusinessDetailController *detailController = segue.destinationViewController; detailController.selectedcontent = selectedContent; }
}