如何解决从CoreData for iOS 14小部件获取数据
我想在小部件中显示从Core Data获取的数据。但是@FetchRequest
在小部件上不起作用。
据我了解,我们必须创建一个应用程序组并创建一个共享的持久容器。
我想知道的是如何从共享的持久性容器中读取(获取)窗口小部件上的数据,或者简单地如何在窗口小部件中显示从核心数据获取的数据。
解决方法
首先,您需要创建一个AppGroup,该组将用于创建Core Data Persistent Container(here是一个很好的说明)
然后,您需要创建自己的CoreData堆栈(在启用了CoreData的情况下创建新的空项目时,可以找到一个示例。)
假设您已经创建了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 { ... }
现在,您可以从共享的持久容器中获取managedObjectContext
:
let moc = CoreDataStack.shared.managedObjectContext
并使用它执行获取请求(更多信息here)
let predicate = NSPredicate(format: "attribute1 == %@","test")
let request = NSFetchRequest<SomeItem>(entityName: "SomeItem")
let result = try moc.fetch(request)
除了上面的所有链接之外,我建议您还阅读有关Core Data的本教程:
这是一个GitHub repository,带有不同的小部件示例,包括核心数据小部件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。