2

我已经找到了解决方案,但仍然想了解问题是什么,以便能够将其转移到类似的问题上。

以这个示例代码为例:

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()
    }
}

如果您随后点击任何选择器,应用程序将在几秒钟后崩溃,并显示Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffeed371fd8).

解决方案是删除 VStack。

但是我仍然想了解如果有 VStack,为什么应用程序会崩溃?

添加 VStack 有什么问题?

4

1 回答 1

1

Form实际上是一个List表单视图构建器中的每个视图都被放入行中,因此将两个选择器组合到 VStack 中会导致将两个选择器放入一行中,当您点击该行时,应该显示哪个选择器列表?...未知 - 因此这是崩溃的原因。

如果您想在表单使用中组合这些视图Section,例如

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)
            }
        }
    }
}
于 2020-07-26T11:07:02.897 回答