簡體   English   中英

推入UINavigationController后,ViewController會立即彈出

[英]ViewController popped immediately after been pushed in UINavigationController

我跳出一個很奇怪的問題。 當我將一個特定的視圖控制器推到另一個視圖控制器時,前者在顯示后很快就被解雇了。 當我將其從主View Controller推入時,它保持原位沒有任何問題。 我設置了斷點,並且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構造。

只需檢查用於推送的第二個視圖控制器是否是一個屬性。 如果在執行推送的方法內創建了secondVC實例,則執行該方法后,secondVC將變為nil。

我通過直接在視圖控制器上調用performSegue而不是將它委托給根控制器來解決此問題。 由於某種原因,如果在導航隊列中要推送控制器的視圖控制器中存在相同類型的視圖控制器,則該委派起作用:我在另一個類中具有此構造,並且我剛剛檢查了它是否確實有效。 否則的效果是我經歷過的奇怪。

我認為,但我可能不確定,Objective-c的情況有所不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM