简体   繁体   English

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

[英]Fetch data from CoreData for iOS 14 widget

I want to display data fetched from Core Data in a widget.我想在小部件中显示从 Core Data 获取的数据。 But @FetchRequest doesn't work on widgets.@FetchRequest不适用于小部件。

As I understand, we have to create an app group and make a shared persistent container.据我了解,我们必须创建一个应用程序组并创建一个共享的持久容器。

What I want to know is how to read (fetch) data on widgets from that shared persistent container or simply, how to display data fetched from Core Data in widgets .我想知道的是如何从共享的持久容器中读取(获取)小部件上的数据,或者简单地说,如何在小部件中显示从 Core Data 获取的数据

First you need to create an AppGroup which will be used to create a Core Data Persistent Container ( here is a good explanation how to do it)首先,您需要创建一个 AppGroup,它将用于创建一个 Core Data Persistent Container(这里有一个很好的解释)

Then you need to create your own CoreData stack (an example can be found when you create a new empty project with CoreData enabled).然后你需要创建你自己的 CoreData 堆栈(当你创建一个启用 CoreData 的新空项目时可以找到一个例子)。

Assuming you have already created your Core Data model (here called DataModel ), you now need to set the container url to your custom shared container location:假设您已经创建了 Core Data 模型(此处称为DataModel ),您现在需要将容器 url 设置为您自定义的共享容器位置:

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 { ... }

Now you can get the managedObjectContext from your shared Persistent Container:现在您可以从共享的 Persistent Container 中获取managedObjectContext

let moc = CoreDataStack.shared.managedObjectContext

and perform a fetch request with it (more information here )并用它执行一个获取请求(更多信息在这里

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

Apart from all the links above I recommend you also read this tutorial about Core Data:除了上面的所有链接,我建议您还阅读有关 Core Data 的本教程:


Here is a GitHub repository with different Widget examples including the Core Data Widget.这是一个GitHub 存储库,其中包含不同的 Widget 示例,包括 Core Data Widget。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM