2015-09-18 11 views
7

Ich habe meine Swift App auf Xcode 7/Swift 2.0 aktualisiert und jetzt funktionieren plötzlich bestimmte Übergänge in meiner App nicht mehr.Xcode 7 - Einige Übergänge funktionieren nicht mehr

Ich habe ein Segment auftauchen ein "Check In" -Modal und es funktioniert perfekt, aber dann habe ich ein weiteres Segment erscheint ein "Check Out" modal, das ist fast identisch und es startet nicht und die App ist eingefroren.

Ich neu erstellt das Segment von Grund auf neu, bestätigt, dass es identisch mit dem "Einchecken" ist, und es funktioniert immer noch nicht.

Ich habe auch stattdessen versucht, eine leere Ansicht anstelle von meinem Check Out modal zu starten und es funktioniert gut.

Es gibt keine Fehler, es friert nur ein, ich habe bestätigt, dass der "prepareForSegue" Teil korrekt aufgerufen wird, aber der "viewDidLoad" Teil meines modalen wird nicht aufgerufen.

FYI, Ich habe Auto-Layout ausgeschaltet.

+3

Siehe diese Frage hier: http://stackoverflow.com/questions/32549020/app-frozen-by-uikit-after-upgrading-to-xcode-7/32549072#32549072 – Yaroslav

+0

Perfekt, das ist genau das, was ich ' Ich sehe. Danke @Yaroslav –

Antwort

8

Hat Ihr "Check Out" Modal ein UITextView? Wenn dies der Fall ist, gibt es einen Fehler in Xcode 7/iOS9, wo Sie keine modale (oder eine beliebige Stammansicht) starten können, die eine UITextView enthält, wenn Sie einen Standardtextwert im Storyboard festgelegt haben.

Ein Problem besteht darin, sicherzustellen, dass Ihr UITextView im Storyboard leer ist oder den Lorem Ipsem-Standardwert hat und stattdessen den Text programmgesteuert in Code in viewDidLoad einstellt.

Hoffentlich wird dieser Fehler bald behoben werden.

+4

Sie können die UITextView verlassen aber den Text entfernen und es funktioniert. Siehe hierzu: http://StackOverflow.com/Questions/32549020/app-frozen-by-uikit-after-upgrading-to-xcode-7/32549072#32549072 – Yaroslav

+0

@Yaroslav, danke, ich werde meine Antwort korrigieren. –

+0

Hatte in den letzten zwei Wochen darum gekämpft, dieses Problem zu lösen. Ich habe meinen anderen Mac nicht aktualisiert, Xcode 6 behalten, um weiter an der App in swift1.2 zu arbeiten. Warum ist dieser Fehler immer noch nicht behoben? – Sahil

1

Ich vermute, dass irgendwo Endlosschleife ist in "Check Out" Controller-Code. Versuchen Sie, die App nach dem Präsentieren des Controllers im Debugger anzuhalten (wenn sie einfriert), und überprüfen Sie den Stacktrace. Wenn es nicht hilft, Code Zeile für Zeile auskommentieren in viewDidLoad und viewWillAppear, um Zeile zu finden, die Einfrieren verursacht.

+0

viewDidLoad wird nie aufgerufen. Die obige UITextView-Sache hat mein Problem behoben. Danke für den Vorschlag. –

1

Ich hatte dieses Problem, versuchen Sie mit diesem

dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      let viewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("Storyboard Id") 
      self.presentViewController(viewController, animated: true, completion: nil) 
     }) 

Sie müssen nur ein Storyboard-ID aus Ihrer Sicht geben und arbeitet es normal.

1

Meine App funktionierte perfekt in iOS8. Seine Strömung war:

VC: View Controller, NVC: Navigation View Controller, ER: Embedded Wurzel Beziehung zwischen NVC und VC, PS: Push Segue, PG: Programmatische Präsentation

NVC1 --- (ER) - > VC1 --- (PS) -> NVC2 --- (ER) -> VC2 und so weiter.

Das Problem war, dass VC1- (PS) -> NVC2 Überleitung nicht funktionierte, gab es kein Einfrieren. vc1.prepareForSegue() wurde ausgeführt, aber VC2 wurde nicht angezeigt. Ich experimentierte und stellte fest, dass ich das hier erwähnte UITextView-Problem nicht hatte. durch Befolgen des Paniermehl unten beschrieben, ich habe es in der folgenden Art und Weise zu versuchen, (am Ende Code) nach Stunden arbeiten: NVC1 --- (ER) -> VC1 --- (PG) -> VC2

Hier sind die Schritte: Wie in Segue issue in iOS9 erwähnt, sind mehrere NVCs aus der Mode (Schande über Apple für plötzlich Graben, was tatsächlich in Ihrem Online-Tutorial empfohlen wird und Apps brechen!). Also änderte ich NVC1 --- (ER) -> VC1 - (PS) -> VC2, während VC2 immer noch in NVC2 eingebettet war. Ich habe Fehler ähnlich der StackOverflow post on view not in hierarchy.Also begann ich den Übergang programmgesteuert und nach der Bekämpfung present vs. push ViewController issue, die in "tried to push modally on active view controller" Nachricht und dann ViewController lifecycle issues Ergebnis "Unbalanced calls to begin/end appearance transactions" Nachrichten ergeben, habe ich den folgenden Code funktioniert. Basierend auf dieser Erfahrung denke ich, dass Apple in Xcode7/iOS9 Update eine funktionierende Sache alleine gelassen haben sollte.

//*********** VC1.swift. A translation of working code 

    class VC1:UIViewController{ 
    private var viewController2:VC2? 
    private var showVC2: Bool = false 
    override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 
     if(showVC2) { 
      showVC2 = false 
      self.pushVC2() 
     } 
    }//viewWillAppear 


    private var info:String? // info from incoming user action. 
    @IBAction unwindToVC1FromUserAction(incomingSegue: UIStoryboardSegue?) { 
    // Do app-specific stuff to get info from incomingSegue and 
    // store in self.info variables. 
    let myboard: UIStoryBoard = self.storyboard!; 
    self.viewController2 = myboard.instantiateViewControllerWithIdentifier(
        "VC2 Storyboard ID") as! VC2 
    self.prepareVC2() // Pass info to VC2.info, stuff you would have done in prepareForSegue 
    showVC2= true 
    } //unwind 

    private func prepareVC2() { 
     self.viewController2.info = self.info // etc.. 
    } 

    private func pushVC2() { 
     self.navigationController!.pushViewController(viewController2!, animated:false) 
    } 
} //class 
0

Ich hatte dies, aber es war keines der oben genannten. Mein Telefonanruf war zufällig in einem Block. Als ich den Anruf in den Hauptthread verschoben habe, sah ich, dass ich einen 'NSUnknownKeyException'-Fehler im neuen View-Controller hatte. Da sich der Block innerhalb des Blocks befand, verhinderte er, dass sich der Fehler in Xcode anmeldete, sodass die App scheinbar ohne Fehler aufhörte.

Sobald das gelöst wurde, funktionierte der ursprüngliche Code gut.

Verwandte Themen