Jak debugować „błąd warunku wstępnego” w Xcode?

9

Tworzę aplikację SwiftUI na Xcode 11, ale kończy się natychmiast, gdy przełączę się na określoną kartę w aplikacji.

Rzecz w tym, że zawsze wskazuje na Application Delegateplik, który moim zdaniem nie jest tak naprawdę problemem. Otrzymuję również ten błąd w konsoli precondition failure: invalid input index: 2i to wszystko, nie ma żadnych dodatkowych szczegółów na temat tego, z którego pliku, tablicy lub funkcji pochodzi ten błąd.

wprowadź opis zdjęcia tutaj

Czy jest jakiś sposób, aby Xcode wyodrębnił, co powoduje ten problem?

szary
źródło
Wydrukować to, co wyświetla się w konsoli? Wygląda na to, że istnieje błąd indeksu poza zakresem. Sprawdź wszystkie tablice, które możesz mieć w docelowym kontrolerze widoku. Lub po prostu sprawdź, czy inicjowany jest ViewController, do którego nawigujesz za pomocą Tab, oraz w tablicy tabController.viewControllers.
Alexander,
Cześć @Alexander, do inicjalizacji jestem pewien, że moje widoki zostały poprawnie zainicjowane. I tak, myślę też, że jest to problem z tablicą, ale nie wiem, w której tablicy i w jakiej klasie, ponieważ ten widok i jego widoki podrzędne są wypełnione tablicami. Dlatego chcę wiedzieć, jak poprawnie debugować. Obecnie próbuję zmienić wiele rzeczy w kodzie, mając nadzieję, że poprawię (nawet nieświadomie).
szary
Rozumiem to w bardzo podobnej sytuacji. Dla mnie aplikacja ulega awarii z tym samym błędem i wyjściem debugowania konsoli. Wygląda na to, że jest to błąd warunku wstępnego C ++ (więc w samym Swift - stąd przez punkt przerwania nie działa). Dla mnie zdarza się, gdy próbuję uzyskać dostęp do rozmiaru GeometryProxy.
Daniel Thorpe,
To samo tutaj - uzyskiwanie dostępu do rozmiaru GeometryProxy, w celu skopiowania do@Binding
Grimxn
Zdarza mi się. Kolejne wywołanie w stosie to GeometryProxy.size.getter (), jednak występuje ono tylko w przypadku, gdy uzyskuję dostęp do kart SwiftUI w określonej kolejności. GeometryReader jest używany tylko na karcie, która powoduje awarię (awaria występuje tylko wtedy, gdy ta karta jest dostępna jako trzecia).
tarasis

Odpowiedzi:

10

Miałem TabView zawierający widok, który korzystał z listy. Podczas przełączania kart moja aplikacja ulegała awarii z podobnym błędem: „błąd warunku wstępnego: atrybut nie ustawił wartości początkowej: 99” Wystąpił błąd:

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

Zawijanie ListView w NavigationView naprawiło awarię. Widziałem to wykorzystanie NavigationView na „Swift Live - 007 SwiftUI TabView && List” Caleba Wellsa . https://youtu.be/v1A1H1cQowI

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

To działało:

var body: some View {
    TabView {
        NavigationView { ListView() }
        .tabItem {
            Image(systemName: "list.dash")
            Text("List")
        }
sygnał dźwiękowy
źródło
Miałem ten sam błąd w Formśrodku, TabViewktóry był już w środku NavigationView. Aby obejść awarię, musiałem owinąć Formkolejnego manekina NavigationViewi ukryć go poza ekranem .padding(.top, -60). 🤷‍♂️
Palimondo
1
to działa, ale nie jest idealne. Nie chcę widoku nawigacji.
Imthath
Mój widok niestandardowy miał już listę w Nawigacji. Zrobiłem to, że usunąłem NavigationView z mojego widoku niestandardowego i dodałem go tak, jak określono powyżej. Po tej zmianie katastrofa zniknęła.
Stefan Vasiljevic
@Palimondo Myślę, że powinno być -100, a nie -60. dzięki za poprawkę
PaFi
@Imthath Zgadzam się z tobą
Cagatay