2016-06-29 19 views
2

Ich versuche einen meiner ViewControllers zu refaktorieren, indem ich ihn aufteile. Dies ist für eine App, die Kartenmanipulationen durchführt. Ich hatte einen Controller, der mehrere Arten von Shuffles bearbeiten konnte, aber jetzt teile ich ihn in separate Controller für jeden einzelnen Shuffle-Typ.performSegueWithIdentifier löst unbekannte Ausnahme aus

Es gibt ein weiteres Storyboard, mit dem Sie Moves auswählen können. Es ist so eingerichtet, dass es über versteckte Schaltflächen verfügt. Die Überschriften zeigen auf Storyboard-Referenzen. Ursprünglich habe ich die Szenen für die Segmente in der Dispatch-Storyboard erstellt und dann mit dem Xcode-Menü Editor> Refactor to Storyboard neu strukturiert.

Ich habe dann ein neues Storyboard für den FaroEditor View Controller erstellt. Dann habe ich versucht herauszufinden, wie man eine Referenz zu diesem Storyboard hinzufügen kann. Ich fand schließlich die "Storyboard-Referenz" in der Objektgalerie.

Ich habe dies in der Dispatch-Storyboard und legen es an die FaroEditor Storyboard-zu-Punkt:

Storyboard

I ein Bit mit dem Storyboard setzen von photoshopping tat, Storyboard Referenzattribute und die segue Attribute in einem einzelnen Bild.

Wenn ich die Segue laufen und auslösen, ich eine Ausnahme ohne Informationen geworfen bekommen, was es ist:

Backtrace

Wieder habe ich Photoshop die drei Top-Stack-Frames in kopieren und einfügen ein einzelnes Bild.

Ich bin ein wenig verloren, wie zu diagnostizieren und zu beheben. Irgendwelche Ideen?

+0

Was an diesem Punkt gleich 'ist segueId'? – WMios

+0

Es ist in der Backtrace ist es "EditFaro" und das ist die ID des Segments in der Entstehung Storyboard. – RickDeNatale

+0

Ich habe noch mehr Nachforschungen angestellt. Ich bin durch den Maschinencode gegangen, und es explodiert, wenn StoryBoard.instantiateViewControllerWithIdentifier: aufgerufen wird. Ich konnte jedoch nicht entziffern, wo es die Kennung erhält, die es verwendet. Im Debugger kann ich das Ziel Storyboard instanziieren und dann instantiatteViewControllerWithIdentifier: mit einer Kennung ich manuell zugewiesen, aber ich habe keine Ahnung, wie der UIKit-Code, was offensichtlich eine falsche Kennung für die View-Controller ist. Es schlägt fehl, ob ich dem View-Controller manuell eine Kennung gebe oder nicht. – RickDeNatale

Antwort

1

Sie benötigen ein ‚Storyboard ID‘ auf der Ansicht hinzufügen, die Sie verweisen, und fügen Sie dann die gleiche ID an die referenzierten ID in den Attribute Inspector

0

UI-Operationen sollten in Hauptthread erfolgen

DispatchQueue.main.async { 
self.performSegue(withIdentifier: "someSegue", sender: self) 
} 

Wichtig Verwenden Sie UIKit-Klassen nur aus dem Hauptthread oder der Hauptversandwarteschlange Ihrer App, sofern nicht anders angegeben. Diese Einschränkung gilt insbesondere für Klassen, die von UIResponder abgeleitet sind oder die Manipulation der Benutzeroberfläche Ihrer App erfordern.

developer.apple.com/documentation/uikit