performSegueWithIdentifier不起作用

时间:2012-04-19 17:25:12

标签: iphone ios5 xcode4.3 segue uistoryboard

我的主视图控制器位于导航控制器中,符合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];

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

当我改变“我的Seque”的类型推动时,它起作用了。 但是对于模态,我在回到主视图控制器后没有做任何事情

我错过了什么?

编辑:

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

(null) is not a valid containment controller key path

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

编辑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];
}

2 个答案:

答案 0 :(得分:21)

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

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

如果您需要iOS 5之前的方法,那么您应该在执行segue之前添加延迟以提供动画时间。

答案 1 :(得分:0)

就我而言,我能够成功执行一次Segue;但以后没有。没有引发任何致命错误,使用DispatchQueue.main.async也无济于事。

最终,我记得我曾经在某个时间在一个单独的分支上工作。决议最终变得很愚蠢。在使用“显示详细信息”样式的segue时,我不得不将其更改为“以模态形式呈现” segue。无论出于何种原因,这使我可以再次执行多次。