ObservableObject типа не найден - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь быстро получить доступ к списку избранных элементов из основного вида с модальным листом. Избранные объекты хранятся в массиве EnvironmentObject. На модальном листе есть кнопка, где вы можете в основном добавить / удалить объект из списка избранных. Однако при удалении элемента EnvironmentObject становится пустым, и приложение вылетает:

Тема 1: Неустранимая ошибка: Нет ObservableObject типа FavouritesList найдено.

В журнале написано:

A View.environmentObject(_:) для FavouritesList может отсутствовать как предок этого представления. File

Как мне убедиться, что он возвращается к ContentView естественным образом?

import SwiftUI

struct ContentView: View {
    @EnvironmentObject var favouriteList: FavouritesList
    @State private var presentingSheet = false

    var body: some View {
        NavigationView {
            List {
                NavigationLink(destination: JudgementsView()) {
                    Text("Judgements")
                }
                NavigationLink(destination: SecondaryView()) {
                    Text("Secondary acts")
                }
                ScrollView(.horizontal, showsIndicators: false) {
                    VStack {
                        if favouriteList.items.isEmpty {
                            Text("Nothing favoured")
                        } else {
                            ForEach(favouriteList.items, id: \.self) { id in
                                VStack {
                                    HStack {
                                        ForEach(judgementsTAXraw.filter {
                                            $0.id == id
                                        }) { judgement in
                                            NavigationLink(destination: FileViewer(file: judgement.id)) {
                                                Button(judgement.title) {
                                                    self.presentingSheet = true

                                                }.sheet(isPresented: self.$presentingSheet) {
                                                    ModalSheet(file: judgement.CELEX)

                                                }
                                            }

                                        }
                                    }
                                    HStack {
                                        ForEach(secondaryTAXraw.filter {
                                            $0.id == id
                                        }) { secondary in
                                            NavigationLink(destination: FileViewer(file: secondary.id)) {
                                                Text(secondary.title).padding()
                                            }

                                        }
                                    }

                                }


                            }
                        }

                    }
                }

            }
            .navigationBarTitle(Text("Test"))
        }
    }
}

struct ModalSheet: View {
    var file: String

    @State private var showCopySheet = false

    @EnvironmentObject var favouriteList: FavouritesList
    var body: some View {
        NavigationView {
            Text("Modal").navigationBarItems(trailing:
                Button(action: {
                    self.showCopySheet = true
                }) {
                    Image(systemName: "doc.on.doc").frame(minWidth: 40)
                }.actionSheet(isPresented: $showCopySheet) {
                    ActionSheet(title: Text("What do you want to do?"), buttons: [
                        .destructive(Text("favText"), action: {
                            if let index = self.favouriteList.items.firstIndex(of: self.file) {

                                self.favouriteList.items.remove(at: index)


                            } else {
                                self.favouriteList.items.append(self.file)

                            }
                        }),
                        .cancel()
                    ])
                }.frame(minWidth: 50)
            )
        }
    }
}

1 Ответ

2 голосов
/ 07 января 2020

Я думаю, вам нужно передать ваш favouriteList в ModalSheet, например, environmentObject try

ModalSheet(file: judgement.CELEX).environmentObject(favouriteList)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...