SwiftUI - 预览时未知的预览提供程序“ContentView_Previews_”。发生在一个全新的项目中

Posted

技术标签:

【中文标题】SwiftUI - 预览时未知的预览提供程序“ContentView_Previews_”。发生在一个全新的项目中【英文标题】:SwiftUI - Unknown preview provider "ContentView_Previews_" when previewing. Happens in a brand-new project 【发布时间】:2021-01-24 17:20:47 【问题描述】:

我有这个简单的观点。

import SwiftUI

struct ContentView: View 
    var body: some View 
        Text("Hello")
    


struct ContentView_Previews: PreviewProvider 
    static var previews: some View 
        ContentView()
    

通常预览效果很好。但是今天,我收到了这个错误Unknown preview provider "ContentView_Previews_"

再试一次 不起作用。当我按 Diagnostics 时,会显示:

RemoteHumanReadableError: Failed to update preview.

Error encountered when sending 'previewInstances' message to agent.

==================================

|  RemoteHumanReadableError: Unknown preview provider "ContentView_Previews_"
|  
|  5SwiftUI does not contain a preview provider named "ContentView_Previews_". Check your build settings to ensure the preview provider is compiled into your product.
|  
|  Mangled name: 009_SwiftUI_0021ContentView_Previews_V

所以我认为 Xcode 可能出现故障,并希望在预览结构的末尾添加下划线。我补充说:

struct ContentView_Previews_: PreviewProvider 

但现在我明白了,Unknown preview provider "ContentView_Previews__

还有其他人遇到过这个吗?我的 Xcode 版本是 12.3 (12C33)。

【问题讨论】:

当你尝试聪明并且项目名称以#开头时也会发生这种情况 【参考方案1】:

我遇到了同样的问题。最终,我发现当项目名称以数字字符开头时会发生这种情况,例如"01-test"。创建一个没有数字作为第一个字符的新项目就可以了,例如"test".

【讨论】:

感谢发帖。我已经有这个问题好几天了,但直到今天早上我唯一的错误是 5 秒超时。想添加以防其他人只收到超时错误。【参考方案2】:

我的项目中有同样的问题。我正在处理的项目名称以数字字符开头,Xcode 在项目文件的几个地方用下划线 _ 替换该字符。在 Service Provider 末尾添加完全相同的下划线,因此所有 SwiftUI 预览都停止工作,出现错误 Unknown preview provider "ContentView_Previews_ 唯一可行的解​​决方案是删除项目名称开头的数字字符,如 Sorceror 提供的答案。 不幸的是,我们并非总是可以更改项目名称来解决问题,最终在没有预览的情况下处理 SwiftUI 项目 - 必须使用旧方法 - 构建并运行整个项目以查看模拟器或真实设备中的更改。 不幸的是,我没有找到另一种方法来解决这个问题并让 SwiftUI 预览正常工作。

【讨论】:

以上是关于SwiftUI - 预览时未知的预览提供程序“ContentView_Previews_”。发生在一个全新的项目中的主要内容,如果未能解决你的问题,请参考以下文章

使用 SwiftUI @Binding 预览崩溃:与应用程序的通信中断

SwiftUI:尝试加载本地 JSON 数据时,Canvas 出现预览错误

用于 SwiftUI 预览的应用数据文件存储在哪里

SwiftUI:使用条件布局在画布中显示预览

扩展视图时 SwiftUI 预览崩溃

SwiftUI 一新建