这是我的情况。
我有三个视图控制器,Root,Pushed和Leaf。
根是堆栈中最低的根。 “推”被推推推推。 “叶子”通过情态语词堆放在堆栈上。
根具有以下例程:
-(IBAction) specialSegue:(UIStoryboardSegue*)segue {
// Do stuff.
}
-(void) viewWillAppear:(BOOL)animated {
}
从“叶”开始,我正在调用将触发“specialSegue”的放松序列。所有这一切。
完全奇怪的是,在调用“viewWillAppear”之前可以经过几秒钟。我凝视着屏幕,等待它放松。我知道“specialSegue”在我的日志中被调用。它立即被调用。但是真正的放松可能会在更晚的时候发生。有时,如果我再次点击屏幕,甚至在没有按钮的地方,视图都会展开,并且viewWillAppear会被点击。
我想就是这样。在此方面的任何帮助将不胜感激。
最佳答案
谢谢jrturton和Bruno。我无法解释,我向您保证,如果设置了断点,调试器会说我正在从主线程调用“performSegue ...”。但是,如果我像这样包装通话:
dispatch_async(dispatch_get_main_queue(), ^{
[self performSegueWithIdentifier:[self.segues objectAtIndex:row] sender:nil];
});
效果很好。看起来好像真的在主线程中,所以不需要上面的代码。但这确实解决了我的问题。所以我继续前进。