Core Data - 数据传输 SwiftUI

Posted

技术标签:

【中文标题】Core Data - 数据传输 SwiftUI【英文标题】:Core Data - Data Transfer SwiftUI 【发布时间】:2021-05-07 11:24:27 【问题描述】:

我正在尝试将 CDListModel 转移到我的“今天”视图,但我无法正确完成。这样我就可以在 list.reminders.count 中查看我今天总共有多少提醒。现在我得到 0

    struct Today: View 
    @Environment(\.managedObjectContext) private var viewContext
    @ObservedObject var list: CDListModel
    @State var isTodayTapped = false
    var body: some View 
        Button(action: 
            self.isTodayTapped.toggle()
        ) 
            ZStack
                RoundedRectangle(cornerRadius: 15)
                    .foregroundColor(.white)
                HStack(alignment: .top, spacing: 100) 
                    Text(String(list.reminders!.count))
                
            
        
        .fullScreenCover(isPresented: $isTodayTapped) 
            TodayView()
        
    

MainPageView

    struct MainPageView: View 
    @Environment(\.managedObjectContext) private var viewContext
    var list: CDListModel
    var body: some View 
        ZStack 
            NavigationView 
                ZStack 
                    VStack
                        HStack(spacing: 20)
                            Today(list: list) //What should I send here?
                                .environment(\.managedObjectContext, viewContext)
                        
                    
                
            
        
    

内容视图

 struct ContentView: View 
    @Environment(\.managedObjectContext) private var viewContext

    @State var selectedList = ListModel(color: "", text: "", reminders: [])
   
    var body: some View 
         MainPageView(selectedList: $selectedList, list: CDListModel())
            .environment(\.managedObjectContext, viewContext)
    

【问题讨论】:

你的问题不清楚。 CDListModel 是什么?您的代码没有显示任何有关 CoreData 的信息。您没有观察、获取等。 【参考方案1】:

您不需要将数据从另一个视图传输到今天视图。因为您需要的数据已经在核心数据中,所以您可以使用

@FetchRequest( entity: CDReminder.entity(),
                   sortDescriptors:
                    [NSSortDescriptor(keyPath: \CDReminder.date, ascending: true)]
    )var reminder: FetchedResults<CDReminder>

在 Today 视图中,不修改任何其他视图。

今天更改如下

struct Today: View 
    @Environment(\.managedObjectContext) private var viewContext
    @FetchRequest( entity: CDReminder.entity(),
                   sortDescriptors:
                    [NSSortDescriptor(keyPath: \CDReminder.date, ascending: true)]
    )var reminder: FetchedResults<CDReminder>

    @State var isTodayTapped = false
    var body: some View 
        Button(action: 
            self.isTodayTapped.toggle()
        ) 
            ZStack
                RoundedRectangle(cornerRadius: 15)
                    .foregroundColor(.white)
                HStack(alignment: .top, spacing: 100) 
                    Text(String(list.reminders!.count))
                
            
        
        .fullScreenCover(isPresented: $isTodayTapped) 
            TodayView()
        
    

主页如下

struct MainPageView: View 
    @Environment(\.managedObjectContext) private var viewContext
    var body: some View 
        ZStack 
            NavigationView 
                ZStack 
                    VStack
                        HStack(spacing: 20)
                            Today()
                                .environment(\.managedObjectContext, viewContext)
                        
                    
                
            
        
    

ContentView 如下

struct ContentView: View 
    @Environment(\.managedObjectContext) private var viewContext

    @State var selectedList = ListModel(color: "", text: "", reminders: [])
   
    var body: some View 
        MainPageView(selectedList: $selectedList)
            .environment(\.managedObjectContext, viewContext)
    

【讨论】:

以上是关于Core Data - 数据传输 SwiftUI的主要内容,如果未能解决你的问题,请参考以下文章

使用 SwiftUI 2.0 和 Core Data 预填充数据

SwiftUI Core Data 删除实体的相关数据

SwiftUI 将 Core Data 实体读入 []

使用 Core Data 提供的数据(在 SwiftUI 中)并与另一个视图共享

SwiftUI:Core Data @FetchRequest 和 List 显示托管对象 - 在 lockscreemn 上丢失数据

如何从存储在 Core Data SwiftUI 中的数据计算平均值