¿Cómo depurar el "error de condición previa" en Xcode?

9

Estoy construyendo una aplicación SwiftUI en Xcode 11, pero finalizo inmediatamente cada vez que cambio a una pestaña en particular en la aplicación.

La cosa es que siempre apunta al Application Delegatearchivo, que creo que no es realmente el problema. También recibo este error en la consola precondition failure: invalid input index: 2y eso es todo, no hay más detalles adicionales sobre de qué archivo, matriz o función proviene este error.

ingrese la descripción de la imagen aquí

¿Hay alguna forma en Xcode para aislar qué está causando este problema?

gris
fuente
Imprimir lo que se muestra en la consola? Parece que puede haber un error de índice fuera de rango. Verifique las matrices que pueda tener en su controlador de vista de destino. O simplemente verifique que el ViewController al que está navegando con la pestaña esté inicializado y en la matriz tabController.viewControllers.
Alexander
Hola @Alexander, para la inicialización, estoy seguro de que mis vistas se inicializan correctamente. Y sí, también estoy pensando que es un problema de matriz, pero no sé qué matriz en qué función y en qué clase, porque esa vista y sus subvistas están llenas de matrices. Es por eso que quiero saber cómo depurar correctamente. Actualmente, estoy tratando de cambiar muchas cosas en mi código, esperando encontrar una solución (incluso sin saberlo).
gris
Estoy entendiendo esto, en una situación muy similar. Para mí, la aplicación se bloquea con el mismo error y la salida de la consola de depuración. Parece ser una falla de precondición de C ++ (por lo tanto, dentro de Swift, por lo tanto, por el punto de interrupción no funciona). Para mí, sucede cuando intento acceder al tamaño de un GeometryProxy.
Daniel Thorpe
Lo mismo aquí - acceder al tamaño de GeometryProxy, para copiar en un@Binding
Grimxn
Me pasa a mí. La siguiente llamada en la pila es GeometryProxy.size.getter (), sin embargo, solo ocurre si accedo a las pestañas SwiftUI en un cierto orden. GeometryReader solo se usa en la pestaña que causa el bloqueo (el bloqueo solo ocurre si se accede a esa pestaña en tercer lugar).
tarasis

Respuestas:

10

Tenía un TabView que contenía una vista que usaba una Lista. Al cambiar de pestaña, mi aplicación fallaba con un error similar: "error de condición previa: el atributo no pudo establecer un valor inicial: 99" Esto se bloqueó:

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

Ajustar el ListView en un NavigationView solucionó el bloqueo. Vi este uso de NavigationView en "Swift Live - 007 SwiftUI TabView && List" por Caleb Wells . https://youtu.be/v1A1H1cQowI

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

Esto funcionó:

var body: some View {
    TabView {
        NavigationView { ListView() }
        .tabItem {
            Image(systemName: "list.dash")
            Text("List")
        }
beepscore
fuente
Tuve el mismo error con Formdentro de un TabViewque ya estaba dentro de a NavigationView. Para evitar el accidente, tuve que envolverlo Formen otro muñeco NavigationViewy ocultarlo fuera de la pantalla .padding(.top, -60). 🤷‍♂️
Palimondo
1
esto funciona, pero no es lo ideal. No quiero una vista de navegación.
Imthath
Mi vista personalizada ya tenía una lista en NavigationView. Lo que hice fue eliminar el NavigationView de mi Vista personalizada y agregarlo como especificó anteriormente. Después de ese cambio, el accidente se fue.
Stefan Vasiljevic
@Palimondo, creo que debería ser -100 y no -60. gracias por la solución
PaFi
@ Imthath Estoy de acuerdo contigo
Cagatay