SwiftUI:如果只是查看,则无法删除列表项

问题描述

我有一个很奇怪的问题。我有一个列表应用程序,当我删除刚刚查看的列表项时会崩溃。我可以删除与我刚才查看的项目不同的项目,而不会崩溃。崩溃错误是:

致命错误:展开一个可选值时意外发现nil:文件/ Users / XXX / Documents / Xcode项目Playground / Test-Camera-CloudKit / Test-Camera-CloudKit / DetailView.swift,第20行

DetailView.swift文件的第20行是显示图像/照片的行[Image(uiImage:UIImage(data:myItem.photo!)?? UIImage(named:“ gray_icon”)!)]。以下是我精简后的应用程序中的文件,试图将这一问题彻底解决。我正在使用CoreData和CloudKit。

ContentView.swift:

0

AddItemView.swift:

const location = useLocation()
const selectedIndex = figureOutSelectedIndex(location)

const [value,setValue] = React.useState(selectedIndex);

DetailView.swift

import SwiftUI

struct ContentView: View {
    @Environment(\.managedObjectContext) var moc
    @FetchRequest(entity: Item.entity(),sortDescriptors: [NSSortDescriptor(key: "name",ascending: true)]) var items: FetchedResults<Item>
    
    @State private var showingAddScreen = false
    
    var body: some View {
        NavigationView {
            List {
                ForEach(items,id: \.self) { item in
                    NavigationLink(destination: DetailView(myItem: item)) {
                        HStack {
                            Text(item.name ?? "Unknown name")
                        }
                    }
                }.onDelete(perform: delete)
            }
            .navigationBarTitle("Items")
            .navigationBarItems(trailing:
                Button(action: {
                    self.showingAddScreen.toggle()
                }) {
                    Image(systemName: "plus")
                }
            )
            .sheet(isPresented: $showingAddScreen) {
                AddItemView().environment(\.managedObjectContext,self.moc)
            }
        }
    }
    
    func delete(at offsets: IndexSet) {
        for index in offsets {
            let item = items[index]
            moc.delete(item)
        }
        do {
            try moc.save()
        } catch {
            print("Error deleting objects")
        }
    }
    
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

ImagePicker.swift

import SwiftUI

struct AddItemView: View {
    @Environment(\.managedObjectContext) var moc
    @Environment(\.presentationMode) var presentationMode

    @State private var image : Data = .init(count: 0)
    @State private var name = ""
    @State private var show = false
    
    var body: some View {
        NavigationView {
            Form {
                Section {
                    TextField("Name of item",text: $name)
                }
                Section {
                    VStack {
                        Button(action: {self.show = true}) {
                            HStack {
                                Image(systemName: "camera")
                            }
                        }
                        Image(uiImage: UIImage(data: self.image) ?? UIImage(named: "gray_icon")!)
                            .resizable()
                            .aspectRatio(contentMode: .fill)
                            .frame(minWidth: 0,maxWidth: .infinity,minHeight: 0,maxHeight: 300,alignment: Alignment.center)
                            .clipped()
                    }
                    .sheet(isPresented: self.$show,content: {
                        ImagePicker(show: self.$show,image: self.$image)
                    })
                }
                Section {
                    Button("Save") {
                        let newItem = Item(context: self.moc)
                        newItem.name = self.name
                        newItem.photo = self.image
                        try? self.moc.save()
                        self.presentationMode.wrappedValue.dismiss()
                    }
                }
            }
        .navigationBarTitle("Add Item")
        }
    }
}

struct AddItemView_Previews: PreviewProvider {
    static var previews: some View {
        AddItemView()
    }
}

我真的很在意应用程序如何在视图中出现错误,而该视图在删除项目时未显示。列表项确实会从CloudKit中删除和删除。删除操作有效。无论照片的coredata属性是否有照片,都会发生崩溃和错误。换句话说,即使该项目确实有照片并且不是零,它也有错误。我要去哪里错了?如何获取它以允许我删除在DetailView中刚刚查看的项目而没有nil错误?任何帮助是极大的赞赏。谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...