Znalazłem już rozwiązanie, ale nadal lubię zrozumieć, jaki problem miał być w stanie przenieść go do podobnych problemów.

Zrób ten przykładowy kod:

import SwiftUI

struct ContentView: View {
    
    private var days = Array(1...31)
    @State private var selectedDay = 1
    
    private var months = [ "January", "February", "March", "April", "May", "June" ]
    @State private var selectedMonth = "January"
    
    
    var body: some View {
        NavigationView {
            Form {
                VStack {
                    Picker("Select day", selection: $selectedDay) {
                        ForEach(self.days, id: \.self) { day in
                            Text(String(day))
                        }
                    }
                    
                    Picker("Select month", selection: $selectedMonth) {
                        ForEach(self.months, id: \.self) { month in
                            Text(month)
                        }
                    }
                }
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

Jeśli następnie dotkniesz dowolnego zbiorników, aplikacja zostanie ustalona po kilku sekundach za pomocą Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffeed371fd8).

Rozwiązaniem było usunięcie vstack.

Ale nadal lubię zrozumieć, dlaczego aplikacja zawiesza się, jeśli jest vstack?

Co jest nie tak o dodaniu vstack?

2
dankito 26 lipiec 2020, 13:49

1 odpowiedź

Najlepsza odpowiedź

Form jest w rzeczywistości List i każdy widok w widoku formularza jest umieszczony w rzędzie, więc łącząc dwa zbieracz do VACK, aby wprowadzić dwa rodzaje do jednego wiersza i po dotknięciu tego wiersza, który powinien wykazać? ... Nieznany - W ten sposób jest to przyczyna katastrofy.

Jeśli chcesz połączyć takie widoki w formularzu, użyj Section, jak

Form {
    Section {
        Picker("Select day", selection: $selectedDay) {
            ForEach(self.days, id: \.self) { day in
                Text(String(day))
            }
        }

        Picker("Select month", selection: $selectedMonth) {
            ForEach(self.months, id: \.self) { month in
                Text(month)
            }
        }
    }
}
1
Asperi 26 lipiec 2020, 11:07