Невозможно получить ссылку на SwiftData ModelContainer и ModelContext в классе MVVMIOS

Программируем под IOS
Ответить
Anonymous
 Невозможно получить ссылку на SwiftData ModelContainer и ModelContext в классе MVVM

Сообщение Anonymous »

Я пытаюсь понять новую структуру SwiftData. Заставить его работать довольно легко, если
я делаю все в представлении SwiftUI. Я пытаюсь быть хорошим программистом и отделять данные
от пользовательского интерфейса, но мне не удалось подключиться к ModelContainer, а ModelContext
является файлом класса.
Вот пример, который можно запустить как есть:
Модель:

Код: Выделить всё

@Model
final public class Thing: Identifiable {

let myID = UUID()
var name: String
var comment: String

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

}//struct
ContentView: измените код в кнопке, чтобы создать 10 тестовых записей для использования версии виртуальной машины.

Код: Выделить всё

struct ContentView: View {

@StateObject var contentVM = ContentViewModel()
@Environment(\.modelContext) private var context

@State private var name: String = ""
@State private var comment: String = ""

@State private var selection: Thing?

@Query(sort: \.name) var things: [Thing]

var body: some View {
NavigationStack {
VStack(alignment: .leading) {
Text("Name:")
.padding(.leading, 12)
TextField("name", text: $name)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding(EdgeInsets(top: 5, leading: 10, bottom: 0, trailing: 10))

Text("Comment:")
.padding(.leading, 12)
TextField("comment", text: $comment)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding(EdgeInsets(top: 5, leading: 10, bottom: 0, trailing: 10))
}//v
.padding()
VStack(spacing: 20) {
Button(action: {
let thing = Thing(name: name, comment: comment)
context.insert(object: thing)
}, label: {
Text("Save")
})

Button(action: {
//contentVM.createThingsForTestVM(count: 10)
createThingsForTest(count: 10)
}, label: {
Text("Create 10 Test Records")
})
}//v buttons

Divider()

List {
ForEach(things) { thing in
Text(thing.name)
}
.onDelete(perform: deleteThings(at:))
}//list
.toolbar {
ToolbarItemGroup(placement: .navigationBarTrailing) {
Button {
deleteAllThings()
} label: {
Image(systemName: "trash")
}

}//group
}//toolbar
}//nav stack
}//body

private func deleteThings(at offsets: IndexSet) {
withAnimation {
offsets.map { things[$0] }.forEach(deleteThing)
}
}//delete at offsets

private func deleteThing(_ thing: Thing) {

//Unselect the item before deleting it.
if thing.objectID == selection?.objectID {
selection = nil
}
context.delete(thing)
}//delete things

private func deleteAllThings() {

for t in things {
if t.objectID == selection?.objectID {
selection = nil
}
context.delete(t)
}
}//delete all things

private func createThingsForTest(count: Int) {

for i in 0..

Подробнее здесь: [url]https://stackoverflow.com/questions/76519217/cant-get-reference-to-swiftdata-modelcontainer-and-modelcontext-in-mvvm-class[/url]
Ответить

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

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

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

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

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