首先,您需要创建一个应用程序组,它将用于创建核心数据持久容器(here https://useyourloaf.com/blog/sharing-data-with-a-widget/很好地解释了如何做到这一点)
然后,您需要创建自己的 Core Data 堆栈(当您创建启用 Core Data 的新空项目时可以找到示例)。
- 在 MVVM 应用程序中访问核心数据堆栈 https://stackoverflow.com/a/61572075/8697793
假设您已经创建了核心数据模型(此处称为DataModel
),您现在需要将容器 url 设置为您的自定义共享容器位置:
- iOS 14 SwiftUI 中主 App 和 Widget 之间共享数据 https://stackoverflow.com/a/63925053/8697793
let containerURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: <your_app_group>)!
let storeURL = containerURL.appendingPathComponent("DataModel.sqlite")
let description = NSPersistentStoreDescription(url: storeURL)
let container = NSPersistentContainer(name: "DataModel")
container.persistentStoreDescriptions = [description]
container.loadPersistentStores { ... }
现在您可以获得managedObjectContext
来自您的共享持久容器:
let moc = CoreDataStack.shared.managedObjectContext
并用它执行获取请求(更多信息here https://medium.com/@aliakhtar_16369/mastering-in-coredata-part-9-nsfetchrequest-d9ad991355d9)
let predicate = NSPredicate(format: "attribute1 == %@", "test")
let request = NSFetchRequest<SomeItem>(entityName: "SomeItem")
let result = try moc.fetch(request)
除了上面的所有链接之外,我建议您还阅读有关核心数据的教程:
- SwiftUI 核心数据教程:入门 https://www.raywenderlich.com/9335365-core-data-with-swiftui-tutorial-getting-started
Here is a GitHub repository https://github.com/pawello2222/WidgetExamples#coredata-widget with different Widget examples including the Core Data Widget.