-2

我想从 coredata 获取数据,并在图表中显示,当应用程序加载时,init func 中的代码存在运行时错误:

让 x=self.marks.wrappedValue.count

错误消息是:Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=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()

            }

    }

}

4

1 回答 1

0

它还没有被评估。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
        }
    }
}
于 2020-04-02T10:59:17.907 回答