如何让预览在 SwiftUI 项目中再次工作

How to get Previews working again in a SwiftUI project

最近我注意到预览在我正在开发的应用程序中停止工作。我使用的是最新的 Xcode 和 Catalina (Beta 7)。 如果我向我的项目添加一个新视图 - TestView,它的预览会失败。这是没有修改的,即默认的 "Hello World" 视图。诊断表明 'TestView' 不是 'MyProject' 的成员类型。 关于如何解决此问题的任何想法?

如果我创建一个新项目,预览工作正常。

该项目在实际设备或模拟器上运行良好。

完整的诊断消息是: 'TestView' 不是 'MyProject'

的成员类型

failedToBuildDylib: /Users/nigelhamilton/Library/Developer/Xcode/DerivedData/MyProject-bgufjjqbmfuwcaahjswocfzmwsgx/Build/Intermediates.noindex/Previews/MyProject/Intermediates.noindex/MyProject.build/Debug-iphonesimulator/MyProject.build/Objects-normal/x86_64/TestView.2.preview-thunk.swift:23 :32: 错误:'TestView' 不是 'MyProject' 的成员类型 类型别名 TestView = MyProject.TestView ~~~~~~~~~ ^ /Users/nigelhamilton/Library/Developer/Xcode/DerivedData/MyProject-bgufjjqbmfuwcaahjswocfzmwsgx/Build/Intermediates.noindex/Previews/MyProject/Intermediates.noindex/MyProject.build/Debug-iphonesimulator/MyProject.build/Objects-normal/x86_64/TestView.2.preview-thunk.swift:16:6: 错误:替换访问器找不到 'body' @_dynamicReplacement(for: body) private var __preview__body: some View { ^

我目前正在从我的项目(或至少是项目的副本)中删除代码,以查看它是否最终会再次开始显示预览。我已经进行了两次尝试,最终成功了,但是删除了大部分代码。所以我试图缩小问题的范围。

我想我已经解决了这个问题。我犯了一个听起来可能很愚蠢的错误。该项目使用 CoreData,我给其中一个实体取了与该项目相同的名称。 虽然这听起来很疯狂,但该项目可以毫无问题地构建 运行(模拟器或设备)。只是预览变得混乱。 我已经重命名了Entity,至少可以预览一些View,包括上面提到的TestView。 还有几个视图无法正确预览,但我认为这是由于另一个问题。

如果这对任何人都有用,我通过将我的一个 CoreData 模型属性从 "created" (Double) 重命名为 "createdTimestamp" (Double) 来解决 "previews not working" 的问题。