Ошибка предусловия SwiftUI: атрибут не смог установить начальный - PullRequest
2 голосов
/ 14 января 2020

У меня есть две страницы в SwiftUI, которые можно переключать с помощью tabView, одна - ProjectPage, другая - HabitPage. На странице ProjectPage может отображаться список проектов. В HabitPage может отображаться список привычек. Новая привычка также может быть добавлена ​​на этой странице. Все проекты и привычки будут храниться в основных данных. Проект имеет отношение к задаче, задача имеет отношение к проекту. После создания новой привычки и перехода на страницу проекта программа выполнит sh.

вывод

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)
}

}

Может кто-нибудь сказать мне, почему? Я давно пытался

...