Удаление SwiftData не вызывает обновление представления в SplitNavigationView — iPadIOS

Программируем под IOS
Ответить
Anonymous
 Удаление SwiftData не вызывает обновление представления в SplitNavigationView — iPad

Сообщение Anonymous »

На iPad самая левая панель (боковая панель) SplitNavigationView имеет кнопку панели инструментов, которая отображает лист. Этот лист может загружать или удалять все объекты SwiftData. Эти объекты перечислены на второй панели (Содержимое). Нажатие кнопки загрузки создает новые образцы данных и без проблем отображает их. Однако нажатие кнопки удаления не оказывает никакого эффекта и не запускает обновление представления.
Контекст модели находится в среде, а список подается с помощью @Query. Я попытался внедрить ModelContext в SettingsSheet, а не получать к нему доступ через среду, но результат тот же. Фактически, при перезапуске данные иногда даже не удаляются.
Я сократил код до минимума, чтобы показать проблему, и нужно просто скопировать, вставить и запустить. . Я неправильно понимаю, как операции SwiftData распространяются через среду? Требуется ли другое обращение с наличием листа? Любая помощь принимается с благодарностью.
import SwiftData
import SwiftUI

@main
struct ProblemTestApp: App {

let container: ModelContainer

var body: some Scene {
WindowGroup {
NavigationSplitView {
SidebarView()
} content: {
ContentView()
} detail: {
DetailTabbedView()
}
.modelContainer(container)
}
}

init() {
let schema = Schema( [ Monkey.self ] )
let configuration = ModelConfiguration("ProblemTestApp", schema: schema)
do {
container = try ModelContainer(for: schema, configurations: configuration)
} catch {
fatalError("Could not configure the SwiftData container.")
}
}
}

// SidebarView

struct SidebarView: View {

@State private var showingSettingsSheet = false

var body: some View {
Text("Sidebar Monkey")
.toolbar {
Button {
showingSettingsSheet.toggle()
} label: {
Label("Show settings", systemImage: "gearshape")
}
}
.sheet(isPresented: $showingSettingsSheet) { /* On dismiss. */ } content: {
SettingsSheet()
}
}
}

// ContentView

struct ContentView: View {

@Query var allMonkeys: [Monkey]

var body: some View {
List {
Text("Monkey count = \(allMonkeys.count)")
ForEach(allMonkeys) { monkey in
Text(monkey.name)
}
}
}
}

// DetailTabbedView

struct DetailTabbedView: View {

var body: some View {
Text("Detail Tabbed View (tabs to come)")
}
}

// Monkey model

@Model
final class Monkey: Identifiable {

var id: UUID = UUID()
var name: String = ""

init(name: String) {
self.name = name
}
}

// SettingsSheet

struct SettingsSheet: View {

@Environment(\.modelContext) var context

var body: some View {
NavigationStack {
HStack {
Button("Load") {
for _ in 0...9 {
let monkey = Monkey(name: String(Int.random(in: 0...999)))
context.insert(monkey)
}
}
Button("Delete") {
do {
try context.delete(model: Monkey.self)
print("Deleted all the Monkeys")
} catch {
print("Failed to delete all Monkeys.")
}
}
}
.navigationTitle("Monkey Settings")
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/786 ... nview-ipad
Ответить

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

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

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

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

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