我的主视图控制器位于导航控制器中,符合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];
}
答案 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。无论出于何种原因,这使我可以再次执行多次。