Xcode 错误的对象传递给 UIViewController

Posted

技术标签:

【中文标题】Xcode 错误的对象传递给 UIViewController【英文标题】:Xcode wrong object passed to UIViewController 【发布时间】:2013-11-27 21:38:51 【问题描述】:

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

    在哪里睡觉 在哪里吃饭 做什么

根据点击的是哪一个(例如,在哪里睡觉),您会获得如下选项的子部分:

    民宿 酒店 大篷车和露营

然后,如果您选择例如酒店,您会看到酒店列表的 UITableView。 UITableView 中有 2 个部分用于区分 3 星级和 4 星级酒店。请参阅下面的屏幕截图。

到目前为止一切正常,但是当我单击一个单元格以转到业务的详细信息页面(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 Department Store - 单击 Sean Hussey 显示 Thats Perfect 详细信息。每个部分都重复此操作。

点击硬件 (Kellihers...) 再次在 Manor West 零售公园上星展示。

但再次单步执行,似乎在 didSelectRowAtIndexPath() 中选择了正确的单元格。

在下面的示例中,我选择了 Sean Hussey,输出再次显示选择了正确的单元格,并且 segue sender:selectedCell 是 Sean Hussey 对象。

但是,传递给 UIViewController 的对象是 Thats Perfect。 谁能看到我哪里出错了?可以提供其他代码,但我确定问题出在此处,因为此方法检查行选择并执行 segues。

【问题讨论】:

更新视图的代码是什么样的? 【参考方案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;

【讨论】:

以上是关于Xcode 错误的对象传递给 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

OS X Core Data - 将托管对象上下文传递给视图控制器

如何将对象处理程序传递给 vue 组件

通过引用将向量对象传递给函数? [关闭]

将对象作为参数传递给函数

将派生类的对象传递给基类

将 R 对象传递给嵌套循环