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

如何解决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(将#修改为@)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?