我目前正在使用SwiftUI
和CoreData
。
情况:我有一个User Detail View
和一个Delete Button
。按下时,用户的核心数据条目将被删除,应用导航返回到根导航视图,这是所有用户的列表。
问题:每次Delete Button
单击应用程序都会崩溃,并显示以下内容Error Message
:
*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[User timeCreated]:无法识别的选择器发送到实例 0x2802ffa40”
我的猜测:我猜这个问题与事实有关,我用 a@ObservedObject Property Wrapper
表示User Object
(看下面的代码)。这也在 Delete 上更新,这显然会导致一些问题。
import SwiftUI
struct UserView: View {
@FetchRequest(sortDescriptors: [NSSortDescriptor(keyPath: \User, ascending: false)], animation: .default) private var users: FetchedResults<User>
var body: some View {
NavigationView {
List {
ForEach(users) { user in
NavigationLink(destination: UserDetailView(user: user)) {
Text(user.name)
}
}
}
}
}
}
struct UserDetailView: View {
@Environment(\.managedObjectContext) var context
@Environment(\.presentationMode) var mode: Binding<PresentationMode>
@ObservedObject var user: User
var body: some View {
Button(action: { deleteUser() }) {
Text("Delete")
}
}
private func deleteUser() {
context.delete(user)
do {
try context.save()
// Navigate Back to List View
self.mode.wrappedValue.dismiss()
} catch let error as NSError {
print("Error deleting Item from Core Data: \(error), \(error.userInfo)")
}
}
}
问题: 如何删除用户并返回根列表视图而不会导致应用程序崩溃? (注意:显然最简单的解决方案是让用户成为普通属性,但是,我需要自动更新行为,因为还有一个更新用户视图可能会改变一些内容)
谢谢你的帮助。