2016-03-19 75 views
0

我在一個相當奇怪的問題中彈跳。當我爲另一個視圖控制器推送一個特定的視圖控制器時,前者在被顯示後不久就被解僱。當我將其推向主視圖控制器時,它保持不變。我把斷點和viewDidDisappear實際上叫做viewDidAppear之後。 通過嗅覺,它看起來像第二個視圖控制器成爲零的一種方式,但如果這是連接到故事板如何可能? 有沒有人知道可能是什麼原因的怪異行爲? 主視圖控制器和第一個視圖控制器都在Swift中,推送的控制器仍然在Objective-c中。 這是我打開第二個視圖控制器:ViewController在UINavigationController中被推入後立即彈出

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

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

我想,但我可能並不確定,在Objective-c中,情況有所不同。

0

只需檢查用於推送的第二個視圖控制器是否屬性。如果在完成推送的方法內創建第二個VC實例,則在執行該方法後,第二個VC將變爲零。

+0

不完全,我添加了觸發segue的代碼片段。 –

相關問題