从iOS 14小部件的CoreData获取数据



我想在小部件中显示从核心数据获取的数据。但是@FetchRequest不适用于小部件。

据我所知,我们必须创建一个应用程序组,并创建一个共享的持久容器。

我想知道的是如何从共享的持久容器读取(获取(小部件上的数据,或者简单地说,如何在小部件中显示从核心数据获取的数据

首先,您需要创建一个AppGroup,它将用于创建核心数据持久容器(这里有一个很好的解释如何做到这一点(

然后,您需要创建自己的CoreData堆栈(在启用CoreData的情况下创建新的空项目时可以找到一个示例(。

  • 访问MVVM应用程序中的核心数据堆栈

假设您已经创建了核心数据模型(此处称为DataModel(,现在需要将容器url设置为您的自定义共享容器位置:

  • 在iOS 14版SwiftUI中的主应用程序和小工具之间共享数据
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

并用它执行提取请求(此处有更多信息(

let predicate = NSPredicate(format: "attribute1 == %@", "test")
let request = NSFetchRequest<SomeItem>(entityName: "SomeItem")
let result = try moc.fetch(request)

除了上面的所有链接,我建议你也阅读本教程关于核心数据:

  • SwiftUI核心数据教程:入门

这是一个GitHub存储库,包含不同的Widget示例,包括核心数据Widget

对于那些完成了上述所有工作,并最终能够获得与核心数据的连接(例如,您可以获得请求的计数(,但无法获取请求的人,主要是因为您正在获取的实体包含可转换类型,并且由于某些原因出现了此错误:无法解码类的对象,请尝试修复此问题。

相关内容

  • 没有找到相关文章

最新更新