如何修复 Xcode 版本 11.0 beta canvas 崩溃?

How to fix Xcode version 11.0 beta canvas crash?

我正在关注 https://developer.apple.com/tutorials/swiftui/tutorials for SwiftUI,我已经下载了 macOS Catalina 和 Xcode 11.0 beta。

Canvas 崩溃并且即使在尝试以下操作后也无法恢复:

代码只是简单地声明了 UI,没什么特别的。

import SwiftUI

struct LandmarkDetail : View {
    var landmark: Landmark

    var body: some View {
        VStack {
            MapView(coordinate: landmark.locationCoordinate)
                .edgesIgnoringSafeArea(.top)
                .frame(height: 300)

            CircleImage(image: landmark.image(forSize: 250))
                .offset(y: -130.0)
                .padding(.bottom, -130.0)

            VStack(alignment: .leading) {
                Text(landmark.name)
                    .font(.title)
                    .multilineTextAlignment(.center)


                HStack {
                    Text(landmark.park)
                        .font(.subheadline)
                    Spacer()
                    Text(landmark.state)
                        .font(.subheadline)
                }
            }
            .padding()

            Spacer()
        }
        .navigationBarTitle(Text(landmark.name), displayMode: .inline)
    }
}

#if DEBUG
struct ContentView_Previews : PreviewProvider {
    static var previews: some View {
        LandmarkDetail(landmark: landmarkData[0])
    }
}
#endif

我希望 canvas 显示 UI,但我一直收到 Cannot preview in this file --- MyApp.app may have crashed 错误。

这是一张图片:

请注意,在某个时间点之前一切正常。

在此先感谢您的帮助!

我遇到了你同样的错误;我通过从教程下载更新的资源来修复。基本上我认为您将 isFavorite 添加到 Landmark 模型,但在 JSON 中缺少该字段,因此解码失败。从教程资产中下载并替换新的 JSON。

如果问题不是 isFavorite,应该是缺少其他资源,每次开始教程中的新课程时一定要下载新的 Landmark 模型和相关资源。

这是 Apple 的错,因为他们没有提到您需要更新 JSON 文件以匹配 Landmark 型号。

编辑

如果您仍有问题,只需在此处添加您的 json 和您的 Landmark 模型,以便我们查看它们

以上是正确的,但是在更新 JSON 以匹配来自 Apple 的资源后,我仍然遇到了崩溃。在此 JSON 中,它们也是一个新类别 "Mountains" 您必须更新 Landmark.swift 以包括以下情况。

enum Category: String, CaseIterable, Codable, Hashable {
        case featured = "Featured"
        case lakes = "Lakes"
        case rivers = "Rivers"
        case mountains = "Mountains"
}

还要确保您已包含所有捆绑图像(附上以供参考)。我在 Apple 的前几个教程之间遗漏了几个。似乎跟随而不是下载资源存在不一致。

第一次崩溃与 Landmark.swift 中添加的枚举类别案例有关:

enum Category: String, CaseIterable, Codable, Hashable {
    case featured = "Featured"
    case lakes = "Lakes"
    case rivers = "Rivers"
    case mountains = "Mountains" . // <- added
}

接下来的第二次崩溃是由于资源名称更改: 如果您不想更新资源,只需确保将 yukon_charleyrivers.jpg 重命名为 'charleyrivers.jps' 或确保它与 Charley Rivers 的 .json "imageName" 值匹配词典.

{
    "name": "Charley Rivers",
    "category": "Rivers",
    "city": "Eaking",
    "state": "Alaska",
    "id": 1007,
    "isFeatured": true,
    "isFavorite": false,
    "park": "Charley Rivers National Preserve",
    "coordinates": {
        "longitude": -143.122586,
        "latitude": 65.350021
    },
    "imageName": "charleyrivers",  // <- changed from yukon_charleyrivers
}