#list #core-data #swiftui
Вопрос:
Это работает — все student.name записи отображаются правильно
import SwiftUI
import CoreData
let students = loadData()
struct ContentView: View {
var body: some View {
NavigationView {
List(students) { student in
HStack {
Text(student.name ?? "No data")
}
}
}
}
}
Но это — нет. После правильного пропуска «если», «студенты» становятся равными нулю.
*** Завершение работы приложения из-за неперехваченного исключения «Исключение NSInvalidArgumentException», причина: «- [Имя пользователя]: непризнанный селектор отправлен экземпляру 0x60000343f840» V
XCode версии 13.0 (13A233)
import SwiftUI
import CoreData
let students: [UserEntity] = loadData()
struct ContentView: View {
var body: some View {
if students.isEmpty{
NoDataView()
}
else{
NavigationView {
List(students) { student in
HStack {
Text(student.name ?? "dsada")
}
}
}
}
}
}
Комментарии:
1. Возможно, это не по теме, но вы объявили
students
вне своей структуры, сделав ее какой-то глобальной переменной, и это плохое дизайнерское решение. Почему вы не используете@FetchRequest
решение здесь?2. Вас интересует не
if
утверждение, а то, как вы его воплотилиstudents
. В первом случае вы объявляете это такlet students = loadData()
, во втором-вы объявляете это такlet students: [UserEntity] = loadData()
. Мы понятия не имеем, что такоеloadData()
а, и нам все равно. @JoakimDanielson абсолютно прав. Это не то, как вы используетеCoreData
. Я согласен, что это выглядит так, как будто вы создали какой-то глобальный источник истины, но это и есть ваша база данных. И вы получаете к нему доступ во всех нужных вам представлениях@FetchRequest
. С этим,CoreData
реализует остальное.