我在一个非常奇怪的问题上反弹。当我将一个特定的视图控制器推送到另一个视图控制器时,前者在显示之后很快被解雇。当我把它推到主视图控制器上时,它会毫无问题地保持不变。我放置了断点,并且viewDidDisappear实际上是在viewDidAppear之后调用的。 通过嗅觉看起来第二个视图控制器在某种程度上变为零,但如果它连接到故事板怎么可能呢? 有没有人知道这可能是什么原因造成奇怪的行为? 主视图控制器和第一个视图控制器都在Swift中,推送的控制器仍然在Objective-c中。 这是我打开第二个视图控制器的方式:
func didSelectRow(indexPath: NSIndexPath, from owner: DestinationsViewController){
if let currentElement=DestinationsContentProvider.sharedContentProvider().stations[indexPath.row]{
print("a \(indexPath.row) elemento \(currentElement)")
let targetModel = currentElement.model
//NSLog(@"targetMetro:%@ targetPaletta=%@", owner.targetMetro, owner.targetPaletta);
if ((targetModel != nil) && (targetModel!.myTraffic != nil)){
targetModel!.segueExecute()
}
}
在未被解雇的模型上调用segueExecute。我在dealloc上放了一个断点,它永远不会到达。
唯一的特殊问题是在模型中我通过这段代码在主控制器而不是实际控制器上执行segue:
mapController.performSegueWithIdentifier("ShowWaiting", sender:self)
即使我通过执行以下操作手动推送控制器,仍然会发生相同的行为:
let mainStoryboard:UIStoryboard!
if (UIDevice.currentDevice().userInterfaceIdiom == .Pad){
mainStoryboard=UIStoryboard(name:"StoryboardiPad", bundle: nil)
} else {
mainStoryboard=UIStoryboard(name:"MainStoryboard_iPhone", bundle: nil)
}
let controller = mainStoryboard.instantiateViewControllerWithIdentifier("Situation") as! StationSituation
controller.model=targetModel;
InArrivoHDViewController.sharedDetailController().navigationController?.pushViewController(controller, animated: true)
不使用segue构造。
答案 0 :(得分:0)
检查用于推送的第二个视图控制器是否属于某个属性。如果在完成推送的方法中创建了secondVC实例,则在执行该方法后,secondVC将变为nil。
答案 1 :(得分:0)
我通过在视图控制器上直接调用performSegue而不是将其委托给根控制器来修复此问题。出于某种原因,如果您在推送控制器的导航队列中存在相同类型的视图控制器,则此委派可以工作:我在另一个类中有这个构造,我只是检查它实际上是有效的。否则效果就是我经历过的怪异。
我想,但我可能不确定,在Objective-c中,情况有所不同。