热门标签 | HotTags
当前位置:  开发笔记 > IOS > 正文

无法在此文件中预览-[AppName].app可能在Xcode11Beta5上崩溃了

如何解决《无法在此文件中预览-[AppName].app可能在Xcode11Beta5上崩溃了》经验,为你挑选了1个好方法。

如果我添加EnviromentObject属性包装器,则Xcode预览不起作用。每次我添加一个Canvas都不会建立,并且出现此错误:

无法在此文件中预览-[App Name] .app可能已崩溃

如果我替换EnviromentObject属性包装器ObservedObject并对其进行初始化,则一切正常。

这是我的代码:

class NetworkManager: ObservableObject {

}

struct ContentView : View {
    @EnvironmentObject var networkManager: NetworkManager

    var body: some View {
        Text("Canvas not working")
    }
}

#if DEBUG
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView().environmentObject(NetworkManager())
    }
}
#endif

更新:

当我使用绑定时,它也不会加载预览:

class NetworkManager: ObservableObject {

}

struct ContentView : View {
    @EnvironmentObject var networkManager: NetworkManager

    var body: some View {
        Text("Canvas not working")
    }
}

#if DEBUG
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView().environmentObject(NetworkManager())
    }
}
#endif

Alex Fringes.. 5

正如@graycampbell所建议的那样,您需要确保将EnvironmentObject提供给SceneDelegate中的ContentView。尽管许多预览/画布机制都位于黑框中,但Xcode的UI建议使用新预览或刷新现有预览,甚至为常规预览构建(或更新)应用变体的形式,例如反对“实时预览”。如果SceneDelegate的设置不正确,则此过程可能会失败。

对于您的@Binding问题,Binding.constant(_ :)应该会有所帮助。根据SwiftUI文档 .constant执行以下操作:

创建一个具有不变值的绑定。

这就是您要预览的内容,而不是示例代码显示的@State。您可以在本Apple教程的第3节中看到使用中的.constant示例。

所以代替这个:

#if DEBUG
struct ContentView_Previews: PreviewProvider {
    @State static var test1 = "Some Preview String"
    static var previews: some View {
        ContentView(test123: $test1)
             .environmentObject(NetworkManager())
    }
}
#endif

您可以执行以下操作:

#if DEBUG
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView(test123: .constant("Some Preview String"))
            .environmentObject(NetworkManager())
    }
}
#endif

进行此更改后,您的代码预览将非常适合我。请记住,您再次需要在SceneDelegate或使用此特定ContentView的任何其他位置为此Binding提供一个值。否则,您将遇到与EnvironmentObject面临的问题类似的问题,只是幸运的是,编译器错误突出了这一特殊的遗漏。



1> Alex Fringes..:

正如@graycampbell所建议的那样,您需要确保将EnvironmentObject提供给SceneDelegate中的ContentView。尽管许多预览/画布机制都位于黑框中,但Xcode的UI建议使用新预览或刷新现有预览,甚至为常规预览构建(或更新)应用变体的形式,例如反对“实时预览”。如果SceneDelegate的设置不正确,则此过程可能会失败。

对于您的@Binding问题,Binding.constant(_ :)应该会有所帮助。根据SwiftUI文档 .constant执行以下操作:

创建一个具有不变值的绑定。

这就是您要预览的内容,而不是示例代码显示的@State。您可以在本Apple教程的第3节中看到使用中的.constant示例。

所以代替这个:

#if DEBUG
struct ContentView_Previews: PreviewProvider {
    @State static var test1 = "Some Preview String"
    static var previews: some View {
        ContentView(test123: $test1)
             .environmentObject(NetworkManager())
    }
}
#endif

您可以执行以下操作:

#if DEBUG
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView(test123: .constant("Some Preview String"))
            .environmentObject(NetworkManager())
    }
}
#endif

进行此更改后,您的代码预览将非常适合我。请记住,您再次需要在SceneDelegate或使用此特定ContentView的任何其他位置为此Binding提供一个值。否则,您将遇到与EnvironmentObject面临的问题类似的问题,只是幸运的是,编译器错误突出了这一特殊的遗漏。


推荐阅读
author-avatar
喋血梦_600
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有