8

我的主视图控制器位于导航控制器中,它符合EditViewControllerDelegate协议。这是我需要以模态方式呈现的两个视图控制器的代表。

@interface EditViewController : UIViewController
@property (nonatomic) id <EditViewControllerDelegate> delegate;
@end

@interface EditSomethingViewController : EditViewController
@end

@interface EditSomethingElseViewController : EditViewController
@end

在一种 editViewController:(EditViewController *)evc didFinishEditing:(Something *) something 方法中,我首先获取所需的数据,然后关闭evc并调用

[self performSegueWithIdentifier:@"My Segue" sender:self];

“我的 Segue”是在 Xcode 中定义的,并且标识符在代码和 Xcode 中都是相同的(我试图更改它只是为了查看它是否被调用并引发异常)

当我将“My Seque”的类型更改为 push 时,它起作用了。但是在我回到主视图控制器后,它不会做任何事情

我错过了什么?

编辑:

我不小心在我的故事板中发现了一个警告!(这很奇怪,因为它不是“从任何地方都可见”的项目中的警告)在“引用故事板 Segues”下的连接检查器中,我的模态 segue 有一个警告。它说 :

(null) is not a valid containment controller key path

我检查了其他模态序列并且有相同的警告,但我不需要通过代码触发它们,所以之前没有问题。

编辑2:

-(void)editViewController:(EditViewController *) evc
didFinishEditing:(Something *) something
{
    self.something = something;
    [self dismissModalViewControllerAnimated:YES];
    For ( OtherThing * otherThing in self.something.otherthingsArray)
    {
        NSLog(@"%@", otherThing);
    }
    [self performSegueWithIdentifier:@"My Segue" sender:self];
}
4

2 回答 2

21

在执行 segue 之前,您需要等到其他视图控制器完成动画。您可以使用新的 iOS 5 方法:

[self dismissViewControllerAnimated:YES completion:^() {
    [self performSegueWithIdentifier:@"My Segue" sender:self];
}];

如果您需要 iOS 5 之前的方法来执行此操作,您应该在执行 segue 之前添加一个延迟以给动画时间。

于 2012-04-21T18:45:04.443 回答
0

就我而言,我能够成功执行一次转场;但不是以后的时间。没有抛出特别的致命错误,并且使用DispatchQueue.main.async也没有帮助我。

最终,我记得我曾在某个时间点让它在一个单独的分支上工作。该决议最终变得非常愚蠢。在我使用“显示细节”风格的转场的地方,我不得不将其更改为“呈现模态”转场。无论出于何种原因,这让我可以再次执行多次。

于 2019-10-30T19:07:07.323 回答