На 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
Удаление SwiftData не вызывает обновление представления в SplitNavigationView — iPad ⇐ IOS
Программируем под IOS
1719366193
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")
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78666509/swiftdata-deletions-not-triggering-a-view-update-in-splitnavigationview-ipad[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия