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