简体   繁体   English

SwiftUI:添加核心数据项时更新选项卡栏徽章

[英]SwiftUI: Update Tab Bar Badge when Core Data item is added

This Problem drives me nuts: I have a small SwiftUi iOS App which works with Core data.这个问题让我抓狂:我有一个小型 SwiftUi iOS 应用程序,它可以处理核心数据。 All works fine, I can add edit etc. But the app is tab bar based ad I want one tabs badge updated when a record is added to core data.一切正常,我可以添加编辑等。但是该应用程序是基于标签栏的广告,我希望在将记录添加到核心数据时更新一个标签徽章。

So I thought I listen to the viewontext.hasChanged bool:所以我想我听viewontext.hasChanged bool:

struct MainView: View {
   @Environment(\.managedObjectContext) private var viewContext
   @State var nrOfItems = 0
   let persistanceController : PersistenceController

   var body: some View {
      TabView{
         ItemListView(persistance: PersistenceController.shared)
            .tabItem{
               Label("Lebensmittel",systemImage: "cart")
            }
            .badge(nrOfItems)
      }
      .onChange(of: viewContext.hasChanges, perform: {newValue in
         nrOfItems = persistanceController.getRecordsCount()
      })
   }
}

But the code in onChange is never called ... and I can't find anything about it neither here nor somewhere else.但是 onChange 中的代码永远不会被调用......而且我在这里或其他地方都找不到任何关于它的东西。 Anyone any hints?任何人有任何提示?

Thanks, Andreas谢谢, 安德烈亚斯

The hasChanges is not published property, so it does not trigger onChange , try instead to use notification directly, like hasChanges没有发布属性,所以它不会触发onChange ,尝试直接使用通知,比如


.onReceive(NotificationCenter.default.publisher(for: NSManagedObjectContext.didChangeObjectsNotification, 
                                             object: viewContext)) { _ in
  nrOfItems = persistanceController.getRecordsCount()

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM