Установка значения по умолчанию для NSManagedObject в SwiftUI Picker?
Я работаю с Picker
в SwiftUI для выбора из списка Core Data NSManagedObject
s и не может заставить средство выбора отображать значение по умолчанию. Он также не будет устанавливать новое значение после его выбора. Есть ли способ иметь значение по умолчанию для отображения средства выбора?
Здесь настраиваются свойства моего NSManagedObject.
extension Company {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Company> {
return NSFetchRequest<Company>(entityName: "Company")
}
@NSManaged public var id: UUID?
@NSManaged public var name: String?
@NSManaged public var companyContacts: NSSet?
@NSManaged public var companyRoles: NSSet?
//...
}
И вот здесь я пытаюсь его использовать.
struct AddRoleSheet: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest(
entity: Company.entity(),
sortDescriptors: [
NSSortDescriptor(keyPath: \Company.name, ascending: true)
]
) var companies: FetchedResults<Company>
//...
@State var company: Company? = // Can I put something here? Would this solve my problem?
//...
var body: some View {
NavigationView {
Form {
Section {
Picker(selection: $company, label: Text("Company")) {
List {
ForEach(companies, id: \.self) { company in
company.name.map(Text.init)
}
}
}
//...
}
}
//...
}
}
1 ответ
Решение
На этапе View.init еще нет полученных результатов, поэтому попробуйте следующее
@State var company: Company? = nil // << just initialize
//...
var body: some View {
NavigationView {
Form {
Section {
Picker(selection: $company, label: Text("Company")) {
List {
ForEach(companies, id: \.self) { company in
company.name.map(Text.init)
}
}
}
//...
}
}
}.onAppear {
// here companies already fetched from database
self.company = self.companies.first // << assign any needed
}
}