【问题标题】:How to get Previews working again in a SwiftUI project如何让预览在 SwiftUI 项目中再次工作
【发布时间】:2020-01-02 14:35:13
【问题描述】:

最近我注意到我正在开发的应用程序中的预览已停止工作。我正在使用最新的 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”的成员类型 typealias 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 { ^

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

【问题讨论】:

  • 以下可能有效: - 退出 Xcode - 打开 Finder,转到文件夹 /Users/nigelhamilton/Library/Developer/Xcode 并删除 DerivedData - 重新打开 Xcode。这不会导致任何数据丢失,但下一次构建可能需要更多时间,因为 Xcode 必须再次执行所有操作。
  • 我之前确实尝试过处理 DerivedData,但不幸的是它没有帮助。
  • 您能否提供您的PreviewProvider 的代码?所有迹象都表明(至少对我而言)好像问题就在那里。
  • PreviewProvider 是 Xcode 默认创建的:struct TestView_Previews: PreviewProvider { static var previews: some View { TestView() } }
  • 实际上 no 这不是“默认” - 所有内容都应命名为 ContentView 而不是 TestView。这就是我问的原因。我猜你是否真的经历过(a)创建一个全新项目的痛苦,(b)导入你编码和自定义的所有内容而不将单个内容更改为ContentView,一切都会构建并运行。接下来,经历 (a) 保留您的 ContentView 的痛苦,但是 - 按视图查看 - 包括您的自定义命名的东西,同时 (b) 构建和运行所有三个输出 - 设备、模拟器、预览 - 你可能会发现你的问题.

标签: preview swiftui


【解决方案1】:

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

【讨论】:

  • 我也认为错误是由于对象名称相同,但我实际上发现您不能同时打开超过 1 个预览。在我的项目中,我不使用 CoreData,但我在一个窗口中测试 Watch UI,在另一个窗口中测试 iPhone UI。只需关闭两者中的一个就可以使另一个工作。我想这是 Xcode 仍处于测试阶段的错误,或者至少我希望如此! :-)
  • 我有一个与项目名称相同的常规课程。无论如何,我想这是一个 Xcode 错误。
  • 我也遇到了同样的问题。拥有一个与项目同名的类似乎会破坏预览。是否有向 Apple 报告错误?我不介意做一个。
  • 我确实向 Apple 发送了错误报告。他们的回应是“请用 iOS 13.1 beta 3 验证这个问题,并用你的结果更新你的错误报告”,这似乎不太相关??
  • 我犯了同样的错误来命名一个与应用程序同名的类。重命名。它现在对我有用。谢谢@guinnessman
【解决方案2】:

如果这对任何人都有用,我通过将我的 CoreData 模型属性之一从“created”(双)重命名为“createdTimestamp”(双)来解决“预览不起作用”的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 2019-11-02
    相关资源
    最近更新 更多