You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中使用CoreData在新视图无法显示列表项问题求助

SwiftUI CoreData新视图列表无内容问题解决

问题核心

在DatePickerView中可正常添加CoreData数据,但跳转到ReminderListView后列表为空,无法显示已添加的标题和日期。

错误原因

你在跳转新视图时新建了一个CoreDataViewModel实例:

NavigationLink(destination: ReminderListView(vm: CoreDataViewModel()))

每个CoreDataViewModel实例持有独立的NSPersistentContainer,新实例的savedEntities初始为空,自然无法展示之前添加的数据。正确做法是传递当前视图中已存在的ViewModel实例,确保两个视图共享同一CoreData上下文。

修复方案

方案1:直接传递现有ViewModel实例

修改DatePickerView中的NavigationLink代码,传入当前已初始化的vm,而非新建实例:

Button(action: {
    guard !titleName.isEmpty else {return}
    reminderSet = dateFormatter.string(from: selectedDate)
    vm.addReminders(text: titleName, reminderText: reminderSet)
    titleName = ""
}, label: {
    // 传递当前视图的vm实例
    NavigationLink(destination: ReminderListView(vm: vm)) {
        Text("Set Reminder")
            .font(.headline)
            .foregroundColor(.white)
            .frame(height: 40)
            .frame(maxWidth: .infinity)
            .background(Color(#colorLiteral(red: 1, green: 0.1857388616, blue: 0.5733950138, alpha: 1)))
            .cornerRadius(10)
     }
    .padding(.horizontal)
})

方案2:通过环境共享ViewModel(更推荐)

多视图共享CoreData场景下,将ViewModel提升至App层级,通过环境传递可避免手动传参的繁琐:

  1. 在App结构体中初始化全局ViewModel:
@main
struct YourReminderApp: App {
    @StateObject private var coreDataVM = CoreDataViewModel()
    
    var body: some Scene {
        WindowGroup {
            DatePickerView()
                .environmentObject(coreDataVM)
        }
    }
}
  1. 修改DatePickerView,通过@EnvironmentObject获取ViewModel:
struct DatePickerView: View {
    @EnvironmentObject var vm: CoreDataViewModel
    // 其余@State属性保持不变...
}
  1. 修改ReminderListView,同样通过@EnvironmentObject获取ViewModel:
struct ReminderListView: View {
    @EnvironmentObject var vm: CoreDataViewModel
  
    var body: some View {
        // 视图内容保持不变...
    }
}

此方式下所有视图共享同一ViewModel实例,数据同步更可靠。

验证修复

修改完成后,添加提醒再跳转至ReminderListView,即可正常显示已保存的标题和日期。

内容的提问来源于stack exchange,提问作者Shana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:05:26