macos - SwiftUI CoreData 异步获取
问题描述
我在带有 SwiftUI 的 macOS 应用程序中使用 CoreData。我主要利用@FetchRequest
SwiftUI 向数据库发出请求。
我注意到当我在数据库中有多个对象时,FetchRequest 需要更多时间。此外,我正在使用该数据中的图像构建一个列表。当我想在内部显示带有该 FetchRequest 的视图时,该视图需要几秒钟才能加载。
我认为这是因为 FetchRequest 是在主线程上执行的。我正在寻找一种方法以异步方式向 CoreData 发出 Fetch Request,因此直接显示 UI。
但是,当数据库中有新记录时,我仍然想使用 FetchRequest 并自动更新 UI。
我虽然使用ObservableObjects
和发布我的结果 via @Published
,这将异步工作,但是我必须手动拉取更新。
这就是我通过@FetchRequest 请求的方式
struct ViewA: View {
@FetchRequest(entity: Venue.entity(), sortDescriptors:[NSSortDescriptor(key:"name", ascending: true, selector: #selector(NSString.localizedStandardCompare(_:)))]) var venueItems: FetchedResults<Venue>
当我在这样的情况下显示 ViewA 时,加载视图需要几秒钟。
struct ViewWrapper: View {
@State var currentView = 0
var body: some View
{
if(currentView == 0) {
Text("Dummy View")
} else {
ViewA() //<< when this view gets active, it takes some time to load. I need async inside View A
}
}
TL.DR:
我想使用 @FetchRequest 包装器,但是以异步方式,因此 UI 会立即显示,并且在后台完成获取。SwiftUI 怎么可能?
解决方案
推荐阅读
- javascript - 使用 Angular 4 上传文件
- html - FontAwesome 从 4 升级到 5 (Tumblr)
- javascript - reactjs 如何处理数组内部的状态变化?(对 Select 元素使用 antd 设计)
- c# - Nmodbus 返回 NotImplementedException: Function code 123 not supported exception while reading response data
- java - 使用 Spring Boot 在 TestNg 测试用例中提供 BeanFactory Bean
- guile - 配置说没有找到 guile-config
- django - 如何进行查询以获取 Django ORM 中每个组的最后一个元素?
- python - 在 Python 中对来自不同类别的 n 长度数组的分类数据进行编码
- heroku - 在 Heroku 上使用 Redis 的服务器端 Flask 会话
- jquery - 如何使用输入文本和选择对数据表应用高级搜索?