2016-08-05 39 views
0

Ich habe Code zum Speichern von Verweisen auf 3 Viewcontrollers (sagen der Klasse TypA) auf UINavigation Controller-Stack, und später alle diese View-Controller sind aus dem Stapel herausgefallen.Absturz beim Versuch, push View-Controller mit Animation

Später auf Knopfdruck, ich versuche, 2 Viewcontrollers normal zu drücken und dann für die 3. Ansicht Controller verwende ich folgende Methode.

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

Navigation geschieht diese Weise 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" (an dieser Stelle kassiert).

Dieser Code funktioniert gut, wenn der Benutzer langsam navigiert, aber wenn Benutzer Schaltfläche klickt schneller diese stürzt mit Ausnahme:

beenden app aufgrund nicht abgefangene Ausnahme ‚NSInvalidArgumentException‘ Grund: ‚Pushing die gleiche Ansicht Controller Instanz mehr als einmal nicht unterstützt '.

Kann jemand dabei helfen?

+0

fügen Sie Ihre Sprache Tag ist objective C oder swift –

Antwort

0

Es sieht aus wie Sie setzen zwei Instanzen eines viewcontroller in yourNavigationViewController so vor auf viewcontroller schieben Sie sollten Instanz, falls vorhanden, wie diese entfernen -

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))!) 
       } 
      } 

     } 

} 

Aufruf über Verfahren vor Ihrer viewcontroller

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

Bitte schauen Sie in Frage, ich versuche, 3 View-Controller der gleichen Klasse zu drücken ... Ihr Code kann nur verwendet werden, wenn Sie nur auf drücken e Viewcontroller, was wäre, wenn Sie 3 Viewcontrollers mit denselben Klassen, aber unterschiedlichen Instanzen pushen möchten? –