SwiftUI 生命周期不支持 CoreData
Posted
技术标签:
【中文标题】SwiftUI 生命周期不支持 CoreData【英文标题】:SwiftUI Life Cycle not supporting CoreData 【发布时间】:2020-07-29 15:00:36 【问题描述】:我正在创建一个新的 ios 应用程序并希望从 SwiftUI 而不是 Storyboard 开始,因为在这种情况下向后兼容性没有问题。观看 WWDC 2020 视频时,我注意到了新的生命周期选项:SwiftUI 应用程序。这看起来很有趣,因为它根本不再使用 Storyboard,这对我来说似乎更干净。
无论如何,我应该如何保存我的数据,因为 CoreData 不适用于此选项。我读到人们只是手动添加了 CoreData,但这对我来说也很奇怪,因为 Apple 目前显然不想要这个。
【问题讨论】:
我没有使用过这个,但我的猜测是因为你不再获得一个 AppDelegate 类,CoreData 设置不能放在那里,目前不支持自动执行此操作。当然,您仍然可以使用 Core Data,但您需要创建自己的管理器类(很多人已经这样做了),并且您必须手动添加模型文件,但一旦完成,您就可以正常使用 Core Data。 猜对了。删除 AppDelegate 是唯一原因,这很有意义。 【参考方案1】:更新
这看起来现在在 Xcode 12.0 中得到修复
原答案
目前似乎没有自动化方法。您需要创建自己的 CoreData
容器。这可以在主应用程序中完成。
示例可能如下所示:
import CoreData
import SwiftUI
@main
struct TestApp: App
var body: some Scene
WindowGroup
ContentView()
.environment(\.managedObjectContext, persistentContainer.viewContext)
var persistentContainer: NSPersistentContainer =
let container = NSPersistentContainer(name: "TestApp")
container.loadPersistentStores(completionHandler: storeDescription, error in
if let error = error as NSError?
fatalError("Unresolved error \(error), \(error.userInfo)")
)
return container
()
func saveContext()
let context = persistentContainer.viewContext
if context.hasChanges
do
try context.save()
catch
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
请注意,您必须手动将数据模型添加到您的项目中。
您可以查看此链接以获得更好的解释:
Using Core Data with SwiftUI 2.0 and Xcode 12或者,您可以按照此处的建议为您的核心数据堆栈创建一个单例:
Accessing Core Data Stack in MVVM application【讨论】:
以上是关于SwiftUI 生命周期不支持 CoreData的主要内容,如果未能解决你的问题,请参考以下文章
如何为不同环境的 SwiftUI App 生命周期应用程序运行 UI 测试?
如何更改应用程序色调颜色(新的 SwiftUI 生命周期应用程序)?