Как отладить «сбой предусловия» в Xcode?

9

Я создаю приложение SwiftUI на Xcode 11, но завершает работу немедленно, когда я переключаюсь на определенную вкладку в приложении.

Дело в том, что он всегда указывает на Application Delegateфайл, который, я думаю, на самом деле не является проблемой. Я также получаю эту ошибку в консоли precondition failure: invalid input index: 2и все, больше никаких дополнительных сведений о том, из какого файла, массива или функции происходит эта ошибка.

введите описание изображения здесь

Есть ли способ в Xcode изолировать, что вызывает эту проблему?

серый
источник
Распечатать что отображается в консоли? Похоже, что есть ошибка индекса вне диапазона. Проверьте любые массивы, которые вы можете иметь в вашем контроллере представления назначения. Или просто проверьте, что тот ViewController, к которому вы переходите с помощью Tab, инициализирован и находится в массиве tabController.viewControllers.
Александр
Привет @ Александр, для инициализации, я уверен, что мои представления инициализированы правильно. И да, я также думаю, что это проблема с массивами, но я не знаю, какой массив, в какой функции и в каком классе, потому что это представление и его подпредставления заполнены массивами. Вот почему я хочу знать, как правильно отлаживать. В настоящее время я пытаюсь изменить многие вещи в своем коде, надеясь, что исправлюсь (даже по незнанию).
серый
Я получаю это, в очень похожей ситуации. Для меня приложение вылетает с той же ошибкой и отлаживает вывод консоли. Похоже, что это ошибка предварительного условия C ++ (то есть внутри самого Swift - следовательно, точка останова не работает). Для меня это происходит при попытке получить доступ к размеру GeometryProxy.
Даниэль Торп
То же самое здесь - доступ к размеру GeometryProxy, чтобы скопировать в@Binding
Grimxn
Бывает со мной. Следующий вызов в стеке - GeometryProxy.size.getter (), однако он происходит только для меня, если я обращаюсь к вкладкам SwiftUI в определенном порядке. GeometryReader используется только на вкладке, которая вызывает сбой (сбой происходит только в том случае, если к этой вкладке обращаются третьи).
Тарас

Ответы:

10

У меня был TabView, содержащий представление, которое использовало List. При переключении вкладок мое приложение зависало с похожей ошибкой: «сбой предварительного условия: атрибут не смог установить начальное значение: 99» Это сбой:

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

Оборачивание ListView в NavigationView исправило сбой. Я видел это использование NavigationView в «Swift Live - 007 SwiftUI TabView && List» Калеба Уэллса . https://youtu.be/v1A1H1cQowI

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

Это сработало:

var body: some View {
    TabView {
        NavigationView { ListView() }
        .tabItem {
            Image(systemName: "list.dash")
            Text("List")
        }
beepscore
источник
У меня была та же ошибка с Formвнутри, TabViewкоторый был уже внутри NavigationView. Чтобы обойти аварию, мне пришлось завернуть Formв другую куклу NavigationViewи скрыть ее за кадром .padding(.top, -60). Pal
Палимондо
1
это работает, но это не идеально. Я не хочу вид навигации.
Imthath
Мой пользовательский вид уже имел список в NavigationView. Я удалил NavigationView из своего пользовательского представления и добавил его, как вы указали выше. После этого изменения авария прошла.
Стефан Васильевич
@Palimondo Я думаю, это должно быть -100, а не -60. спасибо за исправление
PaFi
@Imthath я согласен с вами
Cagatay