У меня есть две страницы в 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)
}
}
Может кто-нибудь сказать мне, почему? Я давно пытался