这是我的情况。

我有三个视图控制器,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];
    });

效果很好。看起来好像真的在主线程中,所以不需要上面的代码。但这确实解决了我的问题。所以我继续前进。

10-08 08:06