3

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

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

  • 我已经尝试彻底清理项目 - 失败
  • 我试过重新启动 Xcode - 失败
  • 我试过重启 - 失败

代码只是声明了 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

我希望画布能够显示 UI,但我不断收到Cannot preview in this file --- MyApp.app may have crashed错误消息。

这是看起来像的图像:

画布崩溃

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

在此先感谢您的帮助!

4

3 回答 3

5

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

如果问题不是,应该是缺少另一个资源,每次从教程开始新课程时,请isFavorite务必下载新模型和相关资源。Landmark

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

编辑

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

于 2019-06-05T12:01:46.413 回答
2

以上是正确的,但是在更新 JSON 以匹配来自 Apple 的资源之后,我仍然遇到了崩溃。在这个 JSON 中,它们也是一个新类别“山”,您必须更新 Landmark.swift 以包含以下案例。

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

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

在此处输入图像描述

于 2019-06-18T11:28:25.247 回答
1

第一次崩溃与 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' 或确保它与 .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
}
于 2019-06-21T13:43:04.587 回答