2021年1月4日星期一

SwiftUI : Thread error when accessing EnvironmentObject access at runtime

I have this scene with this several environmentObject:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {      // Get the managed object context from the shared persistent container.      let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext      // Create the SwiftUI view and set the context as the value for the managedObjectContext environment keyPath.      // Add `@Environment(\.managedObjectContext)` in the views that will need the context.      let contentView = MainTabView()          //Inject Database repository          .environmentObject(DatabaseRepository())          .environmentObject(UserRepository())          .environmentObject(StockRepository(api: AlphaVantageAPI()))          .environment(\.managedObjectContext, context)      // Use a UIHostingController as window root view controller.      if let windowScene = scene as? UIWindowScene {          let window = UIWindow(windowScene: windowScene)                      window.rootViewController = UIHostingController(rootView: contentView)          self.window = window          window.makeKeyAndVisible()      }  }  

In my MainTabView, I have a tab created like this:

struct MainTabView: View {      @EnvironmentObject var database: DatabaseRepository      @EnvironmentObject var userRepository: UserRepository      @EnvironmentObject var stockRepository: StockRepository      var viewModel = MainTabViewModel()      init() {          UITabBar.appearance().barTintColor = UIColor(named: "primary")      }      var body: some View {          TabView {              HomeView(viewModel: HomeViewModel(databaseRepository: database,                                                userRepository: userRepository,                                                stockRepository: stockRepository))                  .tabItem {                      Image("account_balance_wallet")                          .renderingMode(.template)                      Text("Home")                  }.tag(0)              ...          }.accentColor(.white)      }  }  

In my HomeVM, i have this code:

class HomeViewModel: ObservableObject {      @Published var watchingVMs = [EquityPreviewCellViewModel]()              private let databaseRepository: DatabaseRepositoryProtocol      private let userRepository: UserRepositoryProtocol      private let stockRepository: StockRepositoryProtocol              init(databaseRepository: DatabaseRepositoryProtocol,           userRepository: UserRepositoryProtocol,           stockRepository: StockRepositoryProtocol) {          self.databaseRepository = databaseRepository          self.userRepository = userRepository          self.stockRepository = stockRepository          self.bind()      }      func bind() {          let allorders = databaseRepository              .allOrder(userID: userRepository.userID).share()          allorders              .assertNoFailure()              .compactMap({orders in                  return orders?.reduce([Order](), { finalOrders, nextOrder in                      var orders = [Order](finalOrders)                      if !finalOrders.contains(where: { $0.symbol == nextOrder.symbol }) {                          orders.append(nextOrder)                      }                      return orders                  }).map({EquityPreviewCellViewModel(order: $0,                                                     stockRepository: self.stockRepository,                                                     userRepository: self.userRepository,                                                     dataBaseRepository: self.databaseRepository)})              })              .receive(on: DispatchQueue.main)              .assign(to: &self.$watchingVMs)  

My I launch my application I have this crash:

Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

enter image description here

I supposed I am not well using environmentObject but I can't see why.

https://stackoverflow.com/questions/65564160/swiftui-thread-error-when-accessing-environmentobject-access-at-runtime January 04, 2021 at 10:15PM

没有评论:

发表评论