Я создаю простое приложение, используя SwiftData. В моем приложении пользователь может создавать, удалять и редактировать сообщения. Я хочу, чтобы при редактировании они могли нажать «Сохранить», чтобы сохранить изменения, или «Отменить», чтобы отменить изменения. Подход, который я использую, заключается в отключении автосохранения и вызове modelContext.save() при сохранении и modelContext.rollback() при отмене изменений. Итак, мой modelContainer определяется следующим образом:
Код: Выделить всё
WindowGroup {
ContentView()
.modelContainer(for: [Post.self], isAutosaveEnabled: false)
}
и я сохраняю и отменяю вот так:
Код: Выделить всё
PostForm(post: post)
.toolbar {
ToolbarItemGroup(placement: .cancellationAction) {
Button("Cancel") {
if modelContext.hasChanges {
modelContext.rollback()
}
dismiss()
}
}
ToolbarItemGroup(placement: .confirmationAction) {
Button("Save") {
do {
if modelContext.hasChanges {
try modelContext.save()
}
} catch {
fatalError("Failed to save post: \(error.localizedDescription)")
}
callback?()
dismiss()
}
}
}
Проблема, с которой я столкнулся, заключается в том, что после вызова modelContext.rollback() мои сообщения не обновляются в пользовательском интерфейсе, они все равно показывают изменения. Перезапуск приложения показывает сообщения без изменений, поэтому я предполагаю, что modelContext.rollback() фактически отменяет изменения и не сохраняет их в хранилище, а пользовательский интерфейс не реагирует на изменения. Правилен ли такой подход? Как я могу сделать так, чтобы отброшенные изменения из modelContext.rollback() обновлялись в пользовательском интерфейсе?
Подробнее здесь:
https://stackoverflow.com/questions/787 ... ing-the-ui