ошибка во время выполнения при попытке прочитать fetchrequest <> - PullRequest
0 голосов
/ 02 апреля 2020

Я хочу получить данные формы coredata и показать их в диаграммах, при коде init init c при загрузке приложения возникает ошибка времени выполнения:

let x = self.marks.wrappedValue .count

сообщение об ошибке: Поток 1: EXC_BAD_INSTRUCTION (код = EXC_I386_INVOP, субкод = 0x0)

весь код следующий:

import SwiftUI
import Charts
import CoreData

struct CareDetails: View {
    @Environment(\.managedObjectContext) var context
    let timeSpan=["day","week","month","year"]

    let care:Care
    var marks:FetchRequest<Mark>
    @State private var timeSpanIndex = 0
    @State private var showSheet  = false
    private var  sessions:[Int]=[]
    private var  accuracy:[Double]=[]
    init(care:Care){
        self.care=care
        self.marks = FetchRequest(entity:Mark.entity(),
                                                sortDescriptors: [],
                                                predicate: NSPredicate(format:"care_id == %@",care.id!.uuidString))


        let x=self.marks.wrappedValue.count





    }
    var body: some View {

            VStack{

                        Picker(selection: $timeSpanIndex, label: Text("timeSpan")) {
                            ForEach(0..<timeSpan.count,id:\.self){ idx in
                                Text(self.timeSpan[idx])
                            }
                        }
                        .pickerStyle(SegmentedPickerStyle())
                        .padding()

                LineChartViewSwiftUI(dataLabel: self.care.unit!,sessions: self.sessions,accuracy: self.accuracy)



                 Form{
                    Section{
                        List{
                            NavigationLink(destination:
                            CareDetailsList(marks: self.marks)
                                .environment(\.managedObjectContext, self.context)
                            ){

                                Text("显示所有数据")

                            }
                        }

                    }
                    .multilineTextAlignment(.leading)
                }
            .padding()

            }

    }

}

1 Ответ

0 голосов
/ 02 апреля 2020

Это еще не было оценено. Он разрешается, когда update() вызывается функцией body вашего представления. Попробуйте структурировать его немного по-другому и использовать прямо в body.

struct CareView: View {
    let care: Care
    @FetchRequest var marks: FetchedResult<Mark>

    @State private var timeSpanIndex = 0
    @State private var showSheet  = false

    init(care: Care) {
        self.care = care
        self._marks = FetchRequest(...) // set up as before now. note the `_` though!
    }

    var body: some View {
        // make sure you can ID each `Mark` by something
        ForEach(marks, id: \.id) { mark in
            // create your `MarkView` here
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...