SwiftUI前提条件失败:属性无法设置初始值

时间:2020-01-14 03:12:38

标签: swift core-data swiftui swiftui-environment

我在SwiftUI中有两个页面,可以使用tabView进行切换,一个页面是ProjectPage,另一个页面是HabitPage。在ProjectPage中,可以显示项目列表。在HabitPage中,可以显示习惯列表。也可以在此页面中添加新习惯。所有项目和习惯都将存储在核心数据中。项目与任务有关系,任务与项目有关系。创建新习惯并切换到“项目”页面后,程序将崩溃。

输出

2020-01-14 14:03:51.156969+1100 Demo9R[35096:12471800] precondition failure: attribute failed to set an initial value: 74

我的代码的一部分:

struct ProjectView: View {
@Environment(\.managedObjectContext) var managedObjectContext

@FetchRequest(entity: Project.entity(), sortDescriptors: []) var projects: FetchedResults<Project>

@State var popAddProject: Bool = false

var body: some View {
    ZStack {
        NavigationView {
            List {
                ForEach(projects, id: \.self) { project in
                    NavigationLink(destination: ProjectProfile(project: project).environment(\.managedObjectContext, self.managedObjectContext)) {
                        ProjectCard(name: project.wrappedName, tasks: project.tasksName)
                    }
                }
            }
            .navigationBarTitle("Project")
        }

        PlusButton() {
            self.popAddProject.toggle()
        }

        if self.popAddProject {
            MiddleLayer(ifDisapper: self.$popAddProject)

            AddProjectView(ifAppear: self.$popAddProject)
                .background(Color.white)
                .shadow(radius: 16)
                .cornerRadius(12.0)
                .padding()
                .environment(\.managedObjectContext, managedObjectContext)

        }
    }
}

}

HabitPage:

struct HabitView: View {
@Environment(\.managedObjectContext) var managedObjectContext

@FetchRequest(entity: Habit.entity(), sortDescriptors: []) var habits: FetchedResults<Habit>
@FetchRequest(entity: Task.entity(), sortDescriptors: []) var tasks: FetchedResults<Task>

@State var popAddHabit = false

var body: some View {
    ZStack {
        NavigationView {
            List {
                ForEach(self.habits, id: \.self) { habit in
                    HabitCard(habit: habit)
                }
            }
            .navigationBarTitle("Habits")
        }

        PlusButton {
            self.popAddHabit.toggle()
        }
        .disabled(self.tasks.count == 0)

        if self.popAddHabit {
            MiddleLayer(ifDisapper: self.$popAddHabit)

            AddHabitView(ifAppear: self.$popAddHabit)
        }
    }
}

}

ContentView

struct ContentView: View {
@State private var selection = 0

var body: some View {
    TabView(selection: $selection){
        ProjectView()
            .font(.title)
            .tabItem {
                VStack {
                    Image("first")
                    Text("Project")
                }
            }
            .tag(2)
        HabitView()
            .font(.title)
            .tabItem {
                VStack {
                    Image("second")
                    Text("Second")
                }
            }
            .tag(1)
        TodayView()
            .font(.title)
            .tabItem {
                VStack {
                    Text("Third")
                }
            }
            .tag(0)
    }
    .edgesIgnoringSafeArea(.top)
}

}

谁能告诉我为什么?我已经尝试了很长时间

0 个答案:

没有答案