当我首先访问详细信息视图时,删除项目会崩溃

时间:2021-01-02 22:15:12

标签: swiftui

尝试使用 SwiftUI 进行开发,我浏览了 Landmarks 教程,现在正尝试将我学到的知识应用到我自己的示例中。

我实现了一个简单的列表列表-详细信息视图组合,现在还想添加一个删除选项。这在刚访问列表后删除时工作正常。但是,如果我先访问要删除的项目的详细信息视图,则应用程序会在详细信息视图中遇到 nil 崩溃。

代码如下(我试图展示相关部分,但如果我可能需要提供更多信息,请告诉我)。

列表视图

struct ShopprList: View {
    @EnvironmentObject var modelData: ModelData

    var shopprItems: [ShopprItem] {
        modelData.shopprItems
    }
    
    var body: some View {
        NavigationView {
            List {
                ForEach(shopprItems) { shopprItem in
                    NavigationLink(destination: Detail(shopprItem: shopprItem)) {
                        ShopprRow(shopprItem: shopprItem)
                    }
                }
                .onDelete(perform: delete)
            }
            .navigationTitle("Shopping List")
        }
    }
    
    func delete(at offsets: IndexSet) {
        modelData.shopprItems.remove(atOffsets: offsets)
    }
}

Detail 视图如下

struct Detail: View {
    @EnvironmentObject var modelData: ModelData
    var shopprItem: ShopprItem
    
    var shopprItemIndex: Int {
        //the following line crashes following the delete with shopprItem being nil, I suppose
        modelData.shopprItems.firstIndex(where: { $0.id == shopprItem.id })!
    }
...

ModelData 包含 shopprItems 作为 @Published 对象

final class ModelData: ObservableObject {
    @Published var shopprItems: [ShopprItem] = load("dummyData.json")
}
...

我觉得,在离开详细视图或执行删除以将项目标记为已删除时,缺少一些清理代码,但在文档中没有找到任何相关内容。

需要注意的是,数据尚未(尚未)持久化,我目前正在使用来自 json 脚本的一组静态项目初始化应用程序。下一步就是坚持。

任何提示将不胜感激。

0 个答案:

没有答案