Откат SwiftData не обновляет пользовательский интерфейсIOS

Программируем под IOS
Ответить
Anonymous
 Откат SwiftData не обновляет пользовательский интерфейс

Сообщение Anonymous »

Я создаю простое приложение, используя 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»