使用CoreData预览ContentView [英] Previewing ContentView with CoreData

查看:73
本文介绍了使用CoreData预览ContentView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试访问包含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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆