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?


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.