4

我有一个 NavigationController,其中有一个 TableView。电视中的单元格有一个“模态”segue,它指向一个 TableViewController(类:Details.h/.m)。当我选择单元格时,我按预期被带到 TableViewController。

但是我需要添加以下功能:

1)推到目的地,所以我得到一个不错的后退按钮。
2)将所选单元格中的各种对象信息传递给目标TVC。

为此,我执行以下任务:

1) 将 segue 更改为“push”并给它一个标识符“segueToDetails”
2.1) 将代码添加到 didSelectRowAtIndexPath 方法(如下)

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self performSegueWithIdentifier:@"segueToDetails" sender:self];
}

2.2)在prepareForSegue方法中添加代码(下)

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow];
    NSInteger rowNumber = selectedIndexPath.row;

    myObject = (MyObject *) [myArray objectAtIndex:rowNumber];

    Details *details = [segue destinationViewController];
    details.detailsObject = myObject;
}

2.3)确认对象信息正在传递到目的地我使用NSLog输出一些数据(下)

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"name: %@", detailsObject.name);
}

现在,当我运行项目并在表格中选择一个单元格时,我会被带到目标 TVC,我看到 NSLog 的输出很好。我也有一个不错的后退按钮。但是等等,当我点击返回时,我还有另一个返回按钮!单击该后退按钮然后将我返回到我最初来自的地方。每次我转到目标 TVC 时,调试器窗口都会显示此消息。

2012-01-24 13:55:58.240 MyApp[26875:11603] nested push animation can result in corrupted navigation bar
012-01-24 13:55:58.593 MyApp[26875:11603] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
2012-01-24 13:55:58.593 MyApp[26875:11603] Unbalanced calls to begin/end appearance transitions for <SpotDetails: 0x7a7a370>.

关于如何解决这个问题的任何建议?

PS - 我正在使用带有 ARC 的 Xcode 4.2,iOS 5

4

6 回答 6

13

您正在推动视图两次;一次在情节提要中,一次在 didSelectRowAtIndexPath 中。当您在故事板中连接 segue 时,不要将其直接链接到表格单元格,而是链接到视图控制器,以便您可以通过编程方式执行 segue,而不是在您按下单元格时故事板为您执行此操作。

于 2012-01-25T19:08:46.670 回答
12

如果情节提要中有模态转场,则不需要 didSelectRowAtIndexPath: 中的代码。故事板将完成所有其余的工作。如果您尝试手动进行转场并将其放在情节提要中,则会遇到问题。

于 2012-01-24T19:44:58.813 回答
3

您是否覆盖了viewWillAppear/// viewDidAppear?你记得从你的覆盖中调用吗?viewWillDisappearviewDidDisappearsuper

于 2012-01-24T19:45:36.583 回答
1

我有segues这导致我的主导航控制器导致这种情况。我通过将主导航控制器设置回堆栈顶部来解决问题。这是代码:

- (void) viewDidAppear:(BOOL)animated
{
    [self.navigationController popToRootViewControllerAnimated:NO];
}
于 2013-06-10T15:23:25.267 回答
0

只是想将我的问题的解决方案添加到这个线程中,以防有人遇到和我一样的问题。

我复制了一个按钮,然后连接它。它有效,但我确实收到了这个错误。

原来我也错过了取消复制的“新”按钮上的旧连接,所以我有两个连接,新的和旧的。刚刚删除旧的,它的工作。

于 2012-08-11T10:07:59.043 回答
0

我遇到了这个问题,当我不小心两次推送到下一个 viewController 时。这发生了,当我忘记删除我用于测试的推送 segue 时。因此,在进行任何其他操作之前,请检查您是否手动推送了两次愚蠢的错误

于 2013-12-18T07:44:23.777 回答