core-data - SwiftUI 预览画布和核心数据
问题描述
预览画布正在崩溃,但在模拟器中一切正常。我假设它与@ObservedObject 和@Fetchrequest 相关......
在这里尝试使用 CoreData 预览 ContentView 的解决方案
不工作
import SwiftUI
import CoreData
struct TemplateEditor: View {
@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(
entity: GlobalPlaceholders.entity(),
sortDescriptors: [
NSSortDescriptor(keyPath: \GlobalPlaceholders.category, ascending: false),
]
) var placeholders: FetchedResults<GlobalPlaceholders>
@ObservedObject var documentTemplate: Templates
@State private var documentTemplateDraft = DocumentTemplateDraft()
@Binding var editing: Bool
var body: some View {
VStack(){
HStack(){
cancelButton
Spacer()
saveButton
}.padding()
addButton
ForEach(placeholders) {placeholder in
Text(placeholder.name)
}
TextField("Title", text: $documentTemplateDraft.title)
TextField("Body", text: $documentTemplateDraft.body)
.padding()
.frame(width: 100, height:400)
Spacer()
}
...
}
struct TemplateEditor_Previews: PreviewProvider {
static var previews: some View {
let managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Templates")
request.sortDescriptors = [NSSortDescriptor(keyPath: \Templates.created, ascending: false)]
let documentTemplate = try! managedObjectContext.fetch(request).first as! Templates
return TemplateEditor(documentTemplate: documentTemplate, editing: .constant(true)).environment(\.managedObjectContext, managedObjectContext).environmentObject(documentTemplate)
}
}
预计生成预览
解决方案
如果没有数据,我不确定您的尝试行是否可以工作。
let documentTemplate = try! managedObjectContext.fetch(request).first as! Templates
为了让我的工作,我创建了一个要使用的测试项目。像这样:
struct DetailView_Previews: PreviewProvider {
static var previews: some View {
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
//Test data
let newEvent = Event.init(context: context)
newEvent.timestamp = Date()
return DetailView(event: newEvent).environment(\.managedObjectContext, context)
}
}
我还注意到我需要托管 CoreData 视图的早期 tabView 中的 .environment(.managedObjectContext, context) 代码,否则预览将失败。
推荐阅读
- c - 我正在尝试将来自用户的输入字符与数组结构的第一个字母进行比较
- python - Python - 将 xml.etree.cElementTree 作为 ET 导入的 Xml 注释
- javascript - 全局变量更改时如何设置组件的状态?
- julia - 如何在 Julia 中将二维数组转换为一维数组
- typescript - 尝试在 VSCode 上调试 TypeScript 程序时出现“语法错误:无法在模块外使用 import 语句”
- javascript - 如何使用新数据更新 chart.js 图表?
- sql - SQL - 如何从查询结果中的 WHERE IN 子句中选择不匹配的参数
- python-3.x - 如何在类中并在线程中启动的烧瓶/socketio上修补uwsgi
- c# - Outlook 插件:尝试使用 WordEditor 从 RTFBody 中删除文本
- angular - 组件不会在 Angular 9 的子路由中呈现