Wie kann ich "Vorbedingungsfehler" in Xcode debuggen?


9

Ich erstelle eine SwiftUI-App auf Xcode 11, werde jedoch sofort beendet, wenn ich zu einer bestimmten Registerkarte in der App wechsle.

Die Sache ist, es zeigt immer auf die Application DelegateDatei, was meiner Meinung nach nicht wirklich das Problem ist. Ich erhalte diesen Fehler auch in der Konsole precondition failure: invalid input index: 2und das war's, keine zusätzlichen Details mehr darüber, von welcher Datei, welchem ​​Array oder welcher Funktion dieser Fehler stammt.

Geben Sie hier die Bildbeschreibung ein

Gibt es in Xcode eine Möglichkeit zu isolieren, was dieses Problem verursacht?


Drucken, was in der Konsole angezeigt wird? Es scheint, dass möglicherweise ein Indexfehler außerhalb des Bereichs vorliegt. Überprüfen Sie alle Arrays, die Sie möglicherweise auf Ihrem Zielansichts-Controller haben. Oder überprüfen Sie einfach, ob der ViewController, zu dem Sie mit der Registerkarte navigieren, initialisiert ist und sich im Array tabController.viewControllers befindet.
Alexander

Hallo @Alexander, für die Initialisierung bin ich sicher, dass meine Ansichten richtig initialisiert wurden. Und ja, ich denke auch, dass es ein Array-Problem ist, aber ich weiß nicht, welches Array in welcher Funktion und in welcher Klasse enthalten ist, da diese Ansicht und ihre Unteransichten mit Arrays gefüllt sind. Deshalb möchte ich wissen, wie man richtig debuggt. Derzeit versuche ich, viele Dinge in meinem Code zu ändern, in der Hoffnung, dass ich (sogar unwissentlich) eine Lösung gefunden habe.
grau

Ich verstehe das in einer sehr ähnlichen Situation. Für mich stürzt die App mit demselben Fehler ab und debuggt die Konsolenausgabe. Es scheint sich um einen C ++ - Vorbedingungsfehler zu handeln (also innerhalb von Swift selbst - daher funktioniert der Haltepunkt nicht). Für mich passiert es, wenn ich versuche, auf die Größe eines GeometryProxy zuzugreifen.
Daniel Thorpe

Gleiches hier - Zugriff auf die Größe von GeometryProxy, um in eine@Binding
Grimxn

Passiert mir zu. Der nächste Aufruf im Stapel ist GeometryProxy.size.getter (). Er tritt jedoch nur auf, wenn ich in einer bestimmten Reihenfolge auf SwiftUI-Registerkarten zugreife. GeometryReader wird nur in der Registerkarte verwendet, die den Absturz verursacht (Absturz tritt nur auf, wenn auf diese Registerkarte als Dritter zugegriffen wird).
Tarasis

Antworten:


10

Ich hatte eine TabView mit einer Ansicht, die eine Liste verwendete. Beim Wechseln der Tabs stürzte meine App mit einem ähnlichen Fehler ab: "Fehler bei Vorbedingung: Attribut konnte keinen Anfangswert festlegen: 99" Dies stürzte ab:

var body: some View {
    TabView {
        ListView()
        .tabItem {
            Image(systemName: "list.dash")
            Text("List")
        }

Das Umschließen der ListView in eine NavigationView hat den Absturz behoben. Ich habe diese Verwendung von NavigationView in "Swift Live - 007 SwiftUI TabView && List" von Caleb Wells gesehen . https://youtu.be/v1A1H1cQowI

https://github.com/calebrwells/A-Swiftly-Tilting-Planet/tree/master/2019/Live%20Streams/TabView%20List

Das hat funktioniert:

var body: some View {
    TabView {
        NavigationView { ListView() }
        .tabItem {
            Image(systemName: "list.dash")
            Text("List")
        }

Ich hatte den gleichen Fehler mit Forminnerhalb eines TabView, der bereits innerhalb eines war NavigationView. Um den Absturz zu umgehen, musste ich den Formin einen anderen Dummy einwickeln NavigationViewund ihn außerhalb des Bildschirms verstecken .padding(.top, -60). 🤷‍♂️
Palimondo

1
das funktioniert, ist aber nicht ideal. Ich möchte keine Navigationsansicht.
Imthath

Meine benutzerdefinierte Ansicht hatte bereits eine Liste in der Navigationsansicht. Ich habe die Navigationsansicht aus meiner benutzerdefinierten Ansicht entfernt und wie oben angegeben hinzugefügt. Nach dieser Änderung ging der Absturz weg.
Stefan Vasiljevic

@ Palimondo Ich denke, es sollte -100 und nicht -60 sein. danke für das
Update

@Imthath Ich stimme dir zu
Cagatay
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.