Xcode에서 "전제 조건 실패"를 디버깅하는 방법은 무엇입니까?


9

Xcode 11에서 SwiftUI 앱을 작성하고 있지만 앱의 특정 탭으로 전환 할 때마다 즉시 종료됩니다.

그것은 항상 Application Delegate파일을 가리키며 , 실제로 문제는 아니라고 생각합니다. 또한 콘솔 precondition failure: invalid input index: 2에서이 오류가 발생했습니다.이 오류가 발생하는 파일, 배열 또는 기능에 대한 추가 세부 정보는 더 이상 없습니다.

여기에 이미지 설명을 입력하십시오

Xcode 에서이 문제를 일으키는 분리 방법이 있습니까?


콘솔에 표시된 내용을 인쇄 하시겠습니까? 범위를 벗어난 색인 오류가있는 것 같습니다. 대상 뷰 컨트롤러에있는 어레이를 확인하십시오. 또는 Tab으로 탐색하는 ViewController가 초기화되어 tabController.viewControllers 배열에 있는지 확인하십시오.
Alexander

안녕하세요 @Alexander, 초기화를 위해 뷰가 올바르게 초기화되었습니다. 그리고 예, 배열 문제라고 생각하지만 해당 뷰와 하위 뷰가 배열로 채워져 있기 때문에 어떤 배열의 함수와 클래스를 알지 못합니다. 그래서 제대로 디버깅하는 방법을 알고 싶습니다. 현재 코드에서 많은 것을 변경하려고 노력하고 있습니다.
회색

나는 매우 비슷한 상황에서 이것을 얻고 있습니다. 나에게 동일한 오류 및 디버그 콘솔 출력으로 앱이 충돌합니다. 그것은 C ++ 전제 조건 실패 인 것처럼 보입니다 (Swift 자체 내에서-따라서 브레이크 포인트가 작동하지 않습니다). 나에게 GeometryProxy의 크기에 액세스하려고 할 때 발생합니다.
다니엘 소프

동일 여기 -에 복사, GeometryProxy의 크기를 액세스@Binding
Grimxn

나에게 일어난다. 스택의 다음 호출은 GeometryProxy.size.getter ()이지만 특정 순서로 SwiftUI 탭에 액세스하는 경우에만 발생합니다. GeometryReader는 충돌을 일으키는 탭에서만 사용됩니다 (해당 탭에 세 번째로 액세스 한 경우에만 충돌이 발생 함).
tarasis

답변:


10

List를 사용하는 뷰가 포함 된 TabView가 있습니다. 탭을 전환 할 때 "사전 조건 실패 : 속성이 초기 값을 설정하지 못했습니다 : 99"와 유사한 오류로 앱이 다운되었습니다.

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

NavigationView에서 ListView를 래핑하면 충돌이 해결되었습니다. Caleb Wells의 "Swift Live – 007 SwiftUI TabView && List"에서 NavigationView를 사용하는 것을 보았습니다 . 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")
        }

Form안에 TabView이미있는 내부 와 동일한 오류가 발생 했습니다 NavigationView. 충돌을 해결하려면 Form다른 더미 를 감싸고 NavigationView화면에서 숨겨야했습니다 .padding(.top, -60). 🤷‍♂️
Palimondo

1
이것은 작동하지만 이상적이지는 않습니다. 탐색보기를 원하지 않습니다.
Imthath

내 사용자 정의보기에는 NavigationView에 이미 목록이 있습니다. 내가 한 것은 내 사용자 정의보기에서 NavigationView를 제거하고 위에서 지정한대로 추가했습니다. 그 변경 후 충돌이 사라졌습니다.
Stefan Vasiljevic

@Palimondo 나는 -60이 아니라 -100이어야한다고 생각합니다. 수정 해 주셔서 감사합니다
PaFi

@Imthath 동의합니다
Cagatay
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.