ios - 如何在 SwiftUI Core Data @FetchRequest 中使用常量变量?
问题描述
如何@FetchRequest
在 SwiftUI 中使用基于从父视图传入的变量的获取请求,同时确保视图根据核心数据更改进行更新?
我有这个问题,@FetchRequest
在将变量传递给获取请求时在 SwiftUI 中使用不起作用。它会导致以下错误:
不能在属性初始值设定项中使用实例成员“名称”;属性初始化程序在“自我”可用之前运行
struct DetailView: View {
@FetchRequest(fetchRequest: Report.fetchRequest(name: name), animation: .default)
private var data: FetchedResults<Report>
let name: String
var body: some View {
Text("\(data.first?.summary.text ?? "")")
.navigationTitle(name)
.onAppear {
ReportAPI.shared.fetch(for: name) // Make network request to get Report data then save to Core Data
}
}
}
extension Report {
@nonobjc public class func fetchRequest(name: String) -> NSFetchRequest<Report> {
let fetchRequest = NSFetchRequest<Report>(entityName: "Report")
fetchRequest.fetchLimit = 1
fetchRequest.sortDescriptors = [NSSortDescriptor(keyPath: \Report.createdAt, ascending: true)]
fetchRequest.predicate = NSPredicate(format: "details.name == %@", name)
return fetchRequest
}
}
此视图是使用NavigationLink
来自先前视图的 a 推送的。喜欢:NavigationLink(destination: DetailView(name: item.name))
。
我已经查看了这个答案,但我认为它不适用于我的用例,因为通常@FetchRequest
属性包装器会自动侦听数据更改并自动更新。由于我正在进行异步调用以发出网络请求并更新核心数据,因此我需要该data
变量在完成后动态更新。
我也看过这个答案,但我认为它有一些与上面提到的相同的问题(尽管我不确定)。我在使用该代码时也遇到了错误self.data = FetchRequest(fetchRequest: Report.fetchRequest(name: name), animation: .default)
。所以我不确定如何在这里测试我的理论。
无法分配给属性:“数据”是仅获取属性
struct DetailView: View {
@FetchRequest
private var data: FetchedResults<Report>
let name: String
var body: some View {
Text("\(data.first?.summary.text ?? "")")
.navigationTitle(name)
.onAppear {
ReportAPI.shared.fetch(for: name) // Make network request to get Report data then save to Core Data
}
}
init(name: String) {
self.name = name
self.data = FetchRequest(fetchRequest: Report.fetchRequest(name: name), animation: .default)
}
}
因此,我认为这个问题与我的问题不同,因为我需要确保视图会根据 Core Data 的变化动态更新(即,当fetch
方法将新数据保存到 Core Data.
解决方案
推荐阅读
- reactjs - 如何用 jest 和 babel 解决导入问题
- git - 我怎样才能摆脱这些 Git 未跟踪的文件?
- python - 如何将多个文件按几列相交
- python - 您如何在 KivyMD 的屏幕中引用文本字段 ID?
- python - 为什么这会给出 AttributeError?(在 Python 中访问类属性)
- javascript - 需要一个事件来通过 Javascript 捕获 textarea html 元素值的变化
- redux-toolkit - Redux Toolkit - 一个切片的动作被另一个切片捕获
- javascript - 如何有多个参数
- powershell - 旧版本中的 PowerShell 5 类处理
- python - 比较字符串时更改 Python 的默认逻辑