如何修复 Xcode 版本 11.0 测试版画布崩溃?

Posted

技术标签:

【中文标题】如何修复 Xcode 版本 11.0 测试版画布崩溃?【英文标题】:How to fix Xcode version 11.0 beta canvas crash? 【发布时间】:2019-06-05 11:48:34 【问题描述】:

我正在关注 SwiftUI 的 https://developer.apple.com/tutorials/swiftui/tutorials,并且我已经下载了 ma​​cOS 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 错误。

这是一张图片:

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

提前感谢您的帮助!

【问题讨论】:

删除最后添加的行,或者一起开始一个新项目时会发生什么? 如果你在模拟器/设备上运行会发生什么?由于 JSON 解码导致崩溃,但画布无法显示此类错误,所以我在模拟器上运行后发现 @RicoCrescenzio 是的,当我尝试运行应用程序时出现此错误:Fatal error: Couldn't parse landmarkData.json as Array<Landmark>: 这很奇怪,因为一切正常......我根本没有触及 JSON 文件...... . 你有同样的问题吗?如果有,你是怎么解决的? 【参考方案1】:

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

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

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

编辑

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

【讨论】:

是的,这就是问题所在......在获得更新的资源后,一切都像魅力一样。谢谢老哥!【参考方案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 的前几个教程之间,我错过了几个。似乎在跟随而不是下载资源方面存在不一致。

【讨论】:

【参考方案3】:

第一次崩溃与 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

【讨论】:

以上是关于如何修复 Xcode 版本 11.0 测试版画布崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

在“开始开发 iOS 应用程序 (Swift)”教程中,从 Xcode 11.0 开始,Hello World 屏幕出现在画布顶部,将其隐藏

如何修复 - safeAreaLayoutGuide' 仅适用于 iOS 11.0 或更高版本

Xcode Project 因 macOS 11.0 或更高版本的要求而引发错误

如何修复 @testable 导入无法在 xcode 单元测试中加载模块

如何在 iOS9.2 上修复 Xcode 错误“找不到开发者磁盘映像”

Xcode 11.0 模拟器滑动手势不起作用