Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 删除CoreData项,该项也是DetailView中的@ObservedObject,导致Swift 5中的应用程序崩溃_Ios_Swift_Core Data_Swiftui_Observedobject - Fatal编程技术网

Ios 删除CoreData项,该项也是DetailView中的@ObservedObject,导致Swift 5中的应用程序崩溃

Ios 删除CoreData项,该项也是DetailView中的@ObservedObject,导致Swift 5中的应用程序崩溃,ios,swift,core-data,swiftui,observedobject,Ios,Swift,Core Data,Swiftui,Observedobject,我目前正在使用SwiftUI和CoreData 情况:我有一个带有删除按钮的用户详细信息视图。按下时,用户的核心数据条目将被删除,应用程序导航返回到根导航视图,该视图是所有用户的列表 问题:每次单击删除按钮,应用程序就会崩溃,并显示以下错误消息: ***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[用户时间已创建]:未识别的选择器已发送到实例0x2802ffa40” 我的猜测:我想问题与这样一个事实有关,即我对用户对象使用了@Observed

我目前正在使用
SwiftUI
CoreData

情况:我有一个带有
删除按钮的
用户详细信息视图
。按下时,用户的核心数据条目将被删除,应用程序导航返回到根导航视图,该视图是所有用户的列表

问题:每次单击
删除按钮
,应用程序就会崩溃,并显示以下
错误消息

***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[用户时间已创建]:未识别的选择器已发送到实例0x2802ffa40”

我的猜测:我想问题与这样一个事实有关,即我对
用户对象使用了
@ObservedObject属性包装器
(查看下面的代码)。这也是删除时的更新,这显然会导致一些问题

导入快捷界面
结构UserView:View{
@FetchRequest(sortDescriptors:[NSSortDescriptor(keyPath:\User,升序:false)],动画:。默认值)私有变量用户:FetchedResults
var body:一些观点{
导航视图{
名单{
ForEach(用户){user in
导航链接(目标:UserDetailView(用户:用户)){
文本(用户名)
}
}
}
}
}
}
结构UserDetailView:视图{
@环境(\.managedObjectContext)变量上下文
@环境(\.presentationMode)变量模式:绑定
@ObservedObject变量用户:用户
var body:一些观点{
按钮(操作:{deleteUser()}){
文本(“删除”)
}
}
私有func deleteUser(){
context.delete(用户)
做{
尝试context.save()
//导航回列表视图
self.mode.wrappedValue.disclose()文件
}将let错误捕获为NSError{
打印(“从核心数据删除项目时出错:\(错误),\(错误.用户信息)”)
}
}
}
问题:如何删除用户并返回到根列表视图而不发生应用程序崩溃?注意:显然,最简单的解决方案是将用户设置为普通属性,但是,我需要自动更新行为,因为还有一个更新用户视图,它可能会更改某些内容)


感谢您的帮助。

我不确定问题是否在提供的代码中……但请尝试以下操作(未测试-仅想法-延迟删除):


所有代码数据对象编辑都应在数据库队列上完成。这可以使用或,类似以下内容完成:

context.perform {
    context.delete(user)
    do {
        try context.save()
        DispatchQueue.main.async {
            // Navigate Back to List View
            self.mode.wrappedValue.dismiss()
        }
    } catch let error as NSError {
        print("Error deleting Item from Core Data: \(error), \(error.userInfo)")
    }
}

谢谢你的回答,但是应用程序仍在崩溃。你有其他想法吗?嗯……那么我认为原因不在这段代码中。你能给一个项目访问权限或准备一个小的可复制的演示吗?如果这有助于我这么做。但是,错误难道不是,在你删除用户的那一刻,ObservedObject属性尝试更新并生成应用程序崩溃bc。相应的CoreData条目已被删除?可能是因为您在代码中的其他位置直接绑定到其属性。我将很快上载完整代码以获取您的答案,但这仍然会导致应用程序在删除时崩溃。
context.perform {
    context.delete(user)
    do {
        try context.save()
        DispatchQueue.main.async {
            // Navigate Back to List View
            self.mode.wrappedValue.dismiss()
        }
    } catch let error as NSError {
        print("Error deleting Item from Core Data: \(error), \(error.userInfo)")
    }
}