swift - 使用 Picker (SwiftUI) 从 CoreData 实体中选择并保存值
问题描述
我有一个 SwiftUI 应用程序,它使用 CoreData 来存储数据。我使用@FetchRequest 在视图中加载数据。
我想使用默认选择器从 CoreData 存储«Aircraft»中选择一个实体,并将用户的选择保存到另一个存储(“Flight”)。
目前我完全迷路了,不知道如何使 Picker 起作用。
- 我应该在 Picker 的 «selection» 字段中添加什么?
- 如何在 Picker 单元格的文本标签中访问模型的特定值(例如,在标签中显示带有飞机注册的字符串(我班级中的 var «registration»)?我尝试了很多选项,例如
Text("(aircraft.registration ?? "Unknown")")
,但它们都给出了错误的引用和随后的编译错误。
这是我的完整视图代码:
struct PickerView: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest(entity: Aircraft.entity(), sortDescriptors: []) var aircrafts: FetchedResults<Aircraft>
@State private var selectedAircraft = "" // should I use it here?
var body: some View {
Picker("Select aircraft", selection: self.$selectedAircraft) { // here i'm lost. I want to display registration String on my Picker
ForEach(aircrafts, id: \.self) {aircraft in
Text("\(aircraft.registration ?? "Unknown")") // obviously I'm doing something wrong here
Button("Save") {
let newFlight = Flight(context: self.moc)
newFlight.aircraft = self.selectedAircraft // not sure if i'm using correct logic here to save the registration string to to the Flight entity
try? self.moc.save()
self.presentationMode.wrappedValue.dismiss()
}
}
}
}
}
这是我的Flight类(基于CoreData实体模型自动生成):
extension Aircraft {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Aircraft> {
return NSFetchRequest<Aircraft>(entityName: "Aircraft")
}
@NSManaged public var aircraftClass: String?
@NSManaged public var aircraftModel: String?
@NSManaged public var id: UUID?
@NSManaged public var registration: String?
}
这是我的飞机类(基于CoreData实体模型自动生成):
extension Flight {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Flight> {
return NSFetchRequest<Flight>(entityName: "Flight")
}
@NSManaged public var aircraft: String? // we are interested to store the value from picker here
@NSManaged public var flightDuration: Double
@NSManaged public var from: String?
@NSManaged public var id: UUID?
@NSManaged public var remark: String?
@NSManaged public var timeIn: String?
@NSManaged public var timeOut: String?
@NSManaged public var to: String?
@NSManaged public var totalTime: Double
}
解决方案
推荐阅读
- shell - 测试中的 Shell 脚本输出管道不起作用
- sql - SQL 查询 - 将列分组为 XML
- c# - 导出后使用 ClosedXML 时,Excel 图表在现有模板中不显示/丢失
- javascript - 从 Promise 中的数组中移除对象
- html - 标签无法正常工作(MVC、HTML)
- mysql - SQL timeStamp format is different on windows and ubuntu
- whois - 在 whois 命令中找不到注册人电子邮件?
- docusignapi - 我无法在 docusign 中授予假冒权限
- math - 3D 数学体积内的随机点
- django - 如何在每个文件的 Pylint 中获取运行时间