【问题标题】:Core Data - Data Transfer SwiftUICore Data - 数据传输 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 的信息。您没有观察、获取等。

标签: core-data swiftui


【解决方案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)
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    相关资源
    最近更新 更多