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 预填充数据
使用 Core Data 提供的数据(在 SwiftUI 中)并与另一个视图共享
SwiftUI:Core Data @FetchRequest 和 List 显示托管对象 - 在 lockscreemn 上丢失数据