SwiftUI动态采摘形式的崩溃

0

的问题

我是个新手SwiftUI开发,和我有麻烦创造一个看法,即动态提出了不同的采摘根据用户以前的选择在这一观点。 看到的问题,运行以下代码模拟器,改变pickerOneSelection到"三个选择器",然后再改回"两个选择器",并尝试改变pickerTwoSelection. 该应用程序会立即崩溃;具体错误,这个玩具的例子是"螺纹1:EXC_BAD_ACCESS(代码=1,address=0x8)". 任何了解,是大多数的欢迎!

作为旁白,我已经看过这些问题:(SwiftUI层次选择器与动态数据崩溃)和(swiftUi:2个采摘在一个屏幕上的应用程序的崩溃"指标的范围"),但是如果可能的话,我想为了避免转换我的串的选择变量(pickerOneSelection,pickerThreeSelection)成整数,其中必须随后将翻译后进入串获得的文本与用户相关联的选择。 如果这是不可能做我想做的没有索引的变量,如果你能帮我理解了为什么,那将是非常有益的。

import SwiftUI

struct ContentView: View {
    @State var pickerOneSelection: String = "Picker Two"
    @State var pickerTwoVisible: Bool = false
    @State var pickerTwoSelection: Int = 3
    @State var pickerThreeSelection: String = "Option 1"
    
    var pickerOneOptions = ["Picker Two", "Picker Three"]
    var pickerThreeOptions = ["Option 1", "Option 2", "Option 3"]
    
    var body: some View {
        NavigationView {
            Form {
                Picker("Picker One selection", selection: $pickerOneSelection) {
                    ForEach(pickerOneOptions, id: \.self) {
                        Text($0)
                    }
                } // End of Picker 1
                
                if pickerOneSelection == "Picker Two" {
                    HStack {
                        Text("Picker Two selection")
                        Spacer()
                        Button(String(pickerTwoSelection)) {
                            self.pickerTwoVisible.toggle()
                        }
                    } // End of HStack
                    
                    if pickerTwoVisible {
                        Picker("Picker Two", selection: $pickerTwoSelection) {
                            ForEach(0..<32, id: \.self) {
                                Text(String($0))
                            }
                        }
                        .pickerStyle(WheelPickerStyle())
                    } // End of pickerTwoVisible
                    
                } else {
                    
                    Picker("Picker Three selection", selection: $pickerThreeSelection) {
                        ForEach(pickerThreeOptions, id: \.self) {
                            Text($0)
                        }
                    } // End of Picker 3
                    
                }
            } // End of Form
        } // End of NavigationView
    } // End of body
} // End of ContentView

多谢你的帮助和专业知识!

picker swiftui xcode
2021-11-23 13:46:55
1

最好的答案

1

关键的问题是,你隐藏的选择器,所以它是最好的设置其透明度为0

Picker("Picker Two", selection: $pickerTwoSelection) {
                            ForEach(1..<32, id: \.self) {
                                Text(String($0))
                            }
                        }
                        .pickerStyle(WheelPickerStyle())
                        .opacity(pickerTwoVisible ? 1 : 0)
                        .frame(width: pickerTwoVisible ? nil : 0, height: pickerTwoVisible ? nil : 0)
2021-11-23 14:25:11

谢谢你为这一建议。 不幸的是,它不会出现解决的问题。 后加入这个代码两个选择器,应用程序仍然崩溃,如果我改变选择器的一个选择显示三个选择器,那么改变选择器的一个选择回到两个选择器和试图改变选择器的两个选择。 有没有别的东西,我需要做的其他地方,在我的代码,以使这个解决方案的工作?
ej5607

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................