使用CoreData预览ContentView [英] Previewing ContentView with CoreData
问题描述
当我尝试访问包含CoreData提取请求的SwiftUI ContentView时,预览崩溃。想知道设置@environment的正确方法是什么,以便预览可以访问coredata堆栈。在构建模拟器但不使用PreviewProvider时,此方法工作正常
When I try to a SwiftUI ContentView that contains a CoreData fetch request, the preview crashes. Wondering what the correct way to setup the @environment so the preview can access the coredata stack. This works fine when building to a simulator but not with a PreviewProvider
import SwiftUI
struct ContentView: View {
@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(entity: ProgrammingLanguage.entity(), sortDescriptors: [
NSSortDescriptor(keyPath: \ProgrammingLanguage.name, ascending: true),
NSSortDescriptor(keyPath: \ProgrammingLanguage.creator, ascending: false)
]) var languages: FetchedResults<ProgrammingLanguage>
var body: some View {
NavigationView {
List {
ForEach(languages, id: \.self) { language in
Text("Language: \(language.name ?? "Anonymous")")
}
}
.navigationBarTitle("My Languages")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
当我尝试将参数传递给ContentView_Previews中的ContentView时,出现以下编译器错误。
When I try to pass in argument to the ContentView in ContentView_Previews like so I get the following compiler error.
ContentView(managedObjectContext: managedObjectContext)
错误:实例成员'managedObjectContext'不能用于类型'ContentView_Previews'
Error: Instance member 'managedObjectContext' cannot be used on type 'ContentView_Previews'
SwiftUI预览可能还不支持此功能吗?还是有什么办法可以解决这个问题?
Maybe this isn't supported by SwiftUI previews yet? Or is there anything that could fix this?
我正在运行Xcode 11 Beta 7。
I'm running Xcode 11 Beta 7.
推荐答案
信用转到@ShadowDES-在Xcode Beta 7的Master / Detail模板项目中,有一个使用Core Data的预览:
Credit goes to @ShadowDES - in the Master/Detail template project in Xcode Beta 7 there's a preview that uses Core Data:
#if DEBUG
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
return ContentView().environment(\.managedObjectContext, context)
}
}
#endif
这在Xcode Beta 5中有效(我的Beta 7崩溃了)
This works for me in Xcode Beta 5 (my Beta 7 crashes)
这篇关于使用CoreData预览ContentView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!