В процессе изучения основных данных я застрял на следующем: я отображаю список основных объектов данных в ContentView. Если пользователь хочет отредактировать один из них, он долго касается элемента в списке, который открывает контекстную таблицу с помощью кнопки и кнопки редактирования. Все идет нормально. Кнопка редактирования вызывает модальное представление, в котором будет происходить редактирование.
В представлении «Правка» я начинаю с выборки правильного элемента через его свойство UUID, которое было сохранено в UserDefaults.
Я могу отобразить имя элемента, но у меня возникает проблема с датой (у элемента есть свойство Date "eventDate".
Приложение собирается, я запускаю его на своем устройстве, но оно вылетает как как только я пытаюсь отредактировать элемент. В моем коде EditView выдается ошибка, когда я создаю экземпляр значения, которое будет отображаться сборщиком на дату события:
Вот что происходит внутри кнопки редактирования:
Button(action: {
self.modalViewCaller = 1 // To tell the sheet which view to display
UserDefaults.standard.set(item.identNumber?.uuidString, forKey: kactiveEventUUID)
self.settingsModalIsPresented = true
})
{ Text("Edit entry")
Image(systemName: "globe")
}
И способ получения события в EditView:
@Environment(\.managedObjectContext) var managedObjectContext
// We get the event to be edited through its UUID :
@FetchRequest(entity: Takeoffs.entity(),
sortDescriptors: [NSSortDescriptor(keyPath: \Takeoffs.eventDate, ascending: false)],
predicate: NSPredicate(format: "identNumber == %@", UUID(uuidString: UserDefaults.standard.string(forKey: kactiveEventUUID)!)! as CVarArg)) var fetchedEvent: FetchedResults<Takeoffs>
// UserDefaults.standard.object(forKey: kactiveEventUUID) as! CVarArg)
@State var selectedDate = Date()
init() { // This sets "selectedDate" to the event's value for the date picker
_selectedDate = State(initialValue: fetchedEvent.first?.eventDate ?? Date()) // The underscore is used here
}
Проект доступен здесь, если у кого-то есть смелость: https://github.com/Esowes/RecentExp
Спасибо за любую помощь ...
[Edit:] Попытка решения .didAppear, предложенного ниже, но не могу найти представление, которое принимает .didAppear в моем тело:
var body: some View {
NavigationView {
Form {
HStack {
Text("Airport : ")
TextField(String(fetchedEvent.first?.airportName ?? ""), text: $airportNameTextfield)
.disabled(airportNameTextfield.count > 2) // To limit the textField to 3 chars (IATA code)
Button(action: {
self.airportNameTextfield = ""
}) {
Image(systemName: "clear")
}
} // END of Hstack
Picker("", selection: $typeSelectorIndex) {
ForEach(0 ..< types.count) { index in
Text(self.types[index]).tag(index)
}
}
.pickerStyle(SegmentedPickerStyle())
// Text("Selected type is: \(types[typeSelectorIndex])")
VStack {
Button(action: {
self.selectedDate = Date()
}) {
Text("Today")
}
DatePicker("",selection: $selectedDate, displayedComponents: .date)
.padding(30)
.labelsHidden()
}
} // END of Form
.navigationBarItems(
leading:
Button("Done") {
self.saveEdits()
self.presentationMode.wrappedValue.dismiss() // This dismisses the view
} // END of Button "Done"
)
.navigationBarTitle("Event edition")
} // END of Navigation View
} // END of some View