【发布时间】:2025-12-27 18:35:06
【问题描述】:
我正在使用 coredata 来保存信息。此信息填充选择器,但目前没有信息,因此选择器为空。数组是使用 FetchedRequest 设置的。
@FetchRequest(sortDescriptors: [])
var sources: FetchedResults<Source>
@State private var selectedSource = 0
这就是选择器的设置方式。
Picker(selection: $selectedSource, label: Text("Source")) {
ForEach(0 ..< sources.count) {
Text(sources[$0].name!)
}
}
还有一个按钮可以显示另一个工作表并允许用户添加源。
Button(action: { addSource.toggle() }, label: {
Text("Add Source")
})
.sheet(isPresented: $addSource, content: {
AddSource(showSheet: $addSource)
})
如果用户按下添加源,工作表将显示一个文本字段和一个用于添加源的按钮。还有一个关闭工作表的按钮。
struct AddSource: View {
@Environment(\.managedObjectContext) var viewContext
@Binding var showSheet: Bool
@State var name = ""
var body: some View {
NavigationView {
Form {
Section(header: Text("Source")) {
TextField("Source Name", text: $name)
Button("Add Source") {
let source = Source(context: viewContext)
source.name = name
do {
try viewContext.save()
name = ""
} catch {
let error = error as NSError
fatalError("Unable to save context: \(error)")
}
}
}
}
.navigationBarTitle("Add Source")
.navigationBarItems(trailing: Button(action:{
self.showSheet = false
}) {
Text("Done").bold()
.accessibilityLabel("Add your source.")
})
}
}
}
一旦关闭工作表,它就会返回到第一个视图。第一个视图中的选取器不会使用新添加的源进行更新。您必须将其关闭并重新打开。用户添加源后如何更新选择器?谢谢!
【问题讨论】:
标签: ios swift core-data swiftui