Как мой код должен быть изменен, чтобы в случае исключения на уровне базовых данных при добавлении нового элемента, что SwiftUI НЕ продолжал показывать новый элемент?
Справочная информация: Когда я запускаю приведенный ниже код, я получаю исключение при добавлении нового элемента, выполняющего "context.save ()", ОДНАКО, хотя запрос нового элемента действительно не выполнен (не сохранен в Core Data)пользовательский интерфейс показывает новый элемент. Как будто переменная «списки» в строке @FetchRequest не ведет себя динамически.
Вопрос - Как исправить код, чтобы приложение работало правильно?
Код:
import SwiftUI
struct ContentView: View {
@Environment(\.managedObjectContext) var context
@FetchRequest(fetchRequest: List.allListFetchRequest()) var lists: FetchedResults<List>
private func addListItem() {
let newList = List(context: context)
newList.id = 1
newList.title = "Testing 123"
do {
try context.save()
} catch let e as NSError {
print("Could not save new List. \(e.debugDescription)")
return
}
}
var body: some View {
NavigationView {
VStack {
ForEach(lists) { list in
Text("List = \(list.title)")
}
}
.navigationBarTitle( Text("My Todo Lists") )
.navigationBarItems(
trailing: Button(action: {self.addListItem()} ) {
Image(systemName: "plus.square")
}
)
}
}
}
Пример вывода:
Could not save new List. Error Domain=NSCocoaErrorDomain Code=133021 "(null)" UserInfo={NSExceptionOmitCallstacks=true, conflictList=(
"NSConstraintConflict (0x600001fcccc0) for constraint (\n id\n): database: (null), conflictedObjects: (\n \"0x600000a7e360 <x-coredata:///List/t2F01130C-0D2A-4E88-A77D-A7BA0E921C213>\",\n \"0xfb1bb528bb57810c <x-coredata://41B391F1-A95C-4971-9584-A2D3DFFF5380/List/p3>\"\n)"
)}