传递给UIViewController的Xcode错误对象

时间:2013-11-27 21:38:51

标签: iphone xcode5 segue didselectrowatindexpath

我有一个iPhone应用程序,可以从.csv文件中读取本地商家的详细信息。主要有3个部分:

  1. 睡觉的地方
  2. 去哪儿吃饭
  3. 怎么做
  4. 根据点击的是哪一个(例如,在哪里睡觉),您将获得以下选项的子部分:

    1. B&安培;乙
    2. 酒店
    3. Caravan and Camping
    4. 然后,如果您选择例如酒店,您将看到酒店列表的UITableView。 UITableView有2个部分,以区分三星级和四星级酒店。见下面的屏幕抓取。 enter image description here

      到目前为止,这一切都还可以,但是当我点击一个单元格以查看业务的详细信息页面(UIViewController)时,我发现了错误的单元格信息。

      我已经在UITableViewController的didSelectRowAtIndexPath中遍历了代码,看起来我正在每个单元格上注册正确的选择。

      例如,在上面的图片中,如果我选择Ballyroe Heights Hotel,这是我通过它时得到的输出。其中dataArray()是一个NSMutableArray,它包含一个3星级的NSMutableArray和一个4星级酒店的NSMutableArray,如下所示。

      [dataArray addObject:threeStarArray];
      [dataArray addObject:fourStarArray];
      

      Output Image

      但是,点击Ballyroe Heights Hotel酒店可以看到Ballygarry House Hotel and Spa的详细信息

      可能发生的事情的一个线索是在购物部分。下面是购物视图和部分的屏幕截图。

      enter image description here

      点击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。

      enter image description here

1 个答案:

答案 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; }

}