У меня есть объект под названием «Уроки», который состоит из:
@NSManaged public var timeMinutes: Double
@NSManaged public var id: UUID
@NSManaged public var lessonDescription: String
@NSManaged public var date: Dates
Атрибут «дата» связан с отношением «один ко многим» с отдельной сущностью «Даты», которая состоит из:
@NSManaged public var date: Date
Я сейчас пытаюсь отобразить график с суммированным значением timeMinutes по дате. Этот finalArray будет иметь следующую структуру:
struct FinalArray {
let summedMinutes : Double
let date : Date
}
Мой код для генерации (и отображения) этого массива выглядит следующим образом:
import SwiftUI
import SwiftUICharts
struct Test: View {
@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(fetchRequest: Lessons.allLessonsFetchRequest()) var lessons: FetchedResults<Lessons>
var finalArray = [FinalArray]()
init(){
let coreDataArray = [Lessons]()
let allKeys = Set<Date>(coreDataArray.map{$0.date.date})
for key in allKeys {
let sum = coreDataArray.filter({$0.date.date == key}).map({$0.timeMinutes}).reduce(0, +)
finalArray.append(FinalArray(summedMinutes:sum, date:key))
}
finalArray = finalArray.sorted(by: {$0.date < $1.date})
}
var body: some View {
VStack{
LineView(data: finalArray.map {$0.summedMinutes}, title: "This graph returns empty").padding()
LineView(data: lessons.map {$0.timeMinutes}, title: "This graph works").padding()
}
}
}
Проблема заключается в том, что finalArray ничего не возвращает, когда я запустить это? Мои основные данные не пусты; график, который отображает сопоставленные timeMinutes, заполняется. Что я делаю не так?
РЕДАКТИРОВАТЬ:
Если я добавлю простую кнопку в мой вид, который добавляет значения в FinalArray, он работает:
Button(action: {
self.finalArray.append(FinalArray(summedMinutes: 20, date: Date()))
}, label: {
Text("Add")
})
Это предполагает, что FinalArray и чтение из него диаграммы работают, но данные не могут быть извлечены из Core Data. Есть идеи?