2016-08-05 94 views
0

我有代碼存儲對UINavigation控制器堆棧上的3個ViewController(比如類typeA)的引用,隨後所有這些視圖控制器都彈出堆棧。在嘗試使用動畫推視圖控制器時崩潰

後來點擊按鈕後,我嘗試按下2個viewcontrollers,然後爲第三個視圖控制器我使用下面的方法。

[self.navigationController.view.layer addAnimation:transition forKey:kCATransition]; 

導航發生這樣 classTypeA VC1-- > classTypeA VC2 --> classTypeA VC3 --> "class TypeB VC" --> classTypeA VC1-- > classTypeA VC2 --> classTypeA VC3 --> "class TypeB VC" --> classTypeA VC1-- > classTypeA VC2 --> classTypeA VC3 --> "class TypeB VC"(它兌現在這一點)。

此代碼工作得很好,當用戶瀏覽慢,但如果用戶點擊按鈕更快這與異常崩潰:

終止應用程序由於未捕獲的異常 「NSInvalidArgumentException」的,理由是:「推進了同樣的觀點 控制器不止一次實例不支持「。

有人可以幫忙嗎?

+0

添加您的語言標籤是客觀的C或SWIFT –

回答

0

看起來你把一個在yourNavigationViewControllerviewcontroller的兩個實例,從而推viewcontroller,如果你要刪除實例之前,現在的這個樣子 -

func RemoveViewControllersFromNavigationController(vcClass:AnyClass)->Void 
{ 

     let array = self.navigationController?.viewControllers 


     if array != nil 
     { 
      for aviewcontroller in array! 
      { 
       if aviewcontroller.isKindOfClass(vcClass) 
       { 
        self.navigationController?.viewControllers.removeAtIndex((self.navigationController?.viewControllers.indexOf(aviewcontroller))!) 
       } 
      } 

     } 

} 

調用上面的方法推你viewcontroller

let mainStoryboard = UIStoryboard(name: "Main", bundle: nil) 
      let vc = mainStoryboard.instantiateViewControllerWithIdentifier("EventDetailViewController") as! EventDetailViewController 
        RemoveViewControllersFromNavigationController(EventDetailViewController) 
      self.navigationController?.pushViewController(vc, animated: true) 
+0

請看看問題,我試圖推動3視圖控制器相同的類型...您的代碼只能用於當您只推e Viewcontroller,如果你想推送3個ViewController,它們具有相同的類類型但不同的實例? –

相關問題