Como depurar "falha de pré-condição" no Xcode?

9

Estou criando um aplicativo SwiftUI no Xcode 11, mas é encerrado imediatamente sempre que alterno para uma guia específica do aplicativo.

O problema é que sempre aponta para o Application Delegatearquivo, que eu acho que não é realmente o problema. Também estou recebendo esse erro no console precondition failure: invalid input index: 2e é isso, sem mais detalhes adicionais sobre de que arquivo, matriz ou função esse erro vem.

insira a descrição da imagem aqui

Existe alguma maneira no Xcode de isolar o que está causando esse problema?

cinzento
fonte
Imprimir o que é exibido no console? Parece que talvez haja um erro de índice fora da faixa. Verifique as matrizes que você pode ter no seu controlador de exibição de destino. Ou apenas verifique se o ViewController para o qual você está navegando com a guia está inicializado e na matriz tabController.viewControllers.
Alexander
Olá @Alexander, para a inicialização, tenho certeza que meus pontos de vista foram inicializados corretamente. E sim, também estou pensando que é um problema de matriz, mas não sei qual matriz em que função e em qual classe, porque essa exibição e suas subvisões são preenchidas com matrizes. É por isso que eu quero saber como depurar corretamente. Atualmente, estou tentando alterar muitas coisas no meu código, esperando que eu acerte uma correção (mesmo sem saber).
cinza
Estou entendendo isso, em uma situação muito semelhante. Para mim, o aplicativo trava com o mesmo erro e saída do console de depuração. Parece ser uma falha de pré-condição do C ++ (portanto, no próprio Swift - portanto, o ponto de interrupção não funciona). Para mim, isso acontece ao tentar acessar o tamanho de um GeometryProxy.
Daniel Thorpe
O mesmo aqui - acessando o tamanho de GeometryProxy, para copiar em um@Binding
Grimxn
Acontece comigo. A próxima chamada na pilha é GeometryProxy.size.getter (), no entanto, isso só ocorre para mim se eu acessar as guias do SwiftUI em uma determinada ordem. GeometryReader é usado apenas na guia que causa a falha (o travamento ocorre apenas se a guia for acessada em terceiro).
tarasis 17/12/19

Respostas:

10

Eu tinha um TabView contendo uma exibição que usava uma lista. Ao alternar entre guias, meu aplicativo estava travando com um erro semelhante: "falha na condição prévia: o atributo falhou ao definir um valor inicial: 99" Isso travou:

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

A quebra do ListView em um NavigationView corrigiu a falha. Eu vi esse uso do NavigationView em "Swift Live - SwiftUI 007 TabView && List" de Caleb Wells . https://youtu.be/v1A1H1cQowI

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

Isso funcionou:

var body: some View {
    TabView {
        NavigationView { ListView() }
        .tabItem {
            Image(systemName: "list.dash")
            Text("List")
        }
beepscore
fonte
Eu tive o mesmo erro com Formdentro de um TabViewque já estava dentro de um NavigationView. Para contornar o acidente, tive que embrulhar o Formoutro boneco NavigationViewe escondê-lo fora da tela .padding(.top, -60). 🤷‍♂️
Palimondo 9/01
11
isso funciona, mas não é o ideal. Não quero uma visualização de navegação.
Imthath
Minha visualização personalizada já tinha uma lista no NavigationView. O que fiz foi remover o NavigationView do meu modo de exibição personalizado e adicioná-lo como você especificou acima. Após essa mudança, o acidente desapareceu.
Stefan Vasiljevic 01/04
@Palimondo Acho que deveria ser -100 e não -60. Obrigado pela correção
PaFi
@Imthath Concordo com você
Cagatay