после удаления элемента в списке SwiftUI (при поддержке Core Data) появляется ошибка «Поток 1: EXC_BAD_INSTRUCTION»? (код прилагается) - PullRequest
0 голосов
/ 02 апреля 2020

После завершения удаления строки в списке SwiftUI появляется ошибка «Поток 1: EXC_BAD_INSTRUCTION». Кажется, что удаление основных данных работает так же, как после перезапуска эти данные были удалены. Так что, может быть, что-то делать с SwiftUI, пытающимся обновить свой вид после того, как будет выполнено удаление Core Data ????

Код:

import SwiftUI
import CoreData

struct ContentView: View {
    @Environment(\.managedObjectContext) var context
    @FetchRequest(entity: GCItem.entity(), sortDescriptors: []) var gcItems: FetchedResults<GCItem>

    private func addItem(title:String) {
        let newItem = GCItem(context: context)
        newItem.id = UUID()
        newItem.title = title
        do {
            try context.save()
        } catch let e as NSError {
            fatalError("Unresolved error \(e), \(e.userInfo)")
        }
    }

    private func deleteItem(at offsets:IndexSet) {
        self.context.perform {
            // Delete Item
            for index in offsets {
                let item = self.gcItems[index]
                self.context.delete(item)
            }

            // Persist
            do {
                try self.context.save()
            } catch let e as NSError {
                // TODO: How to undelete list???
                print("ERROR : Can not save GCItem items: \(e.description)")
            }
        }
    }

    var body: some View {
        NavigationView {
            VStack {
                List() {
                    ForEach(gcItems) { gcItem in
                        HStack {
                            Text("test")
                        }
                    }
                    .onDelete(perform: self.deleteItem)
                }
                Button(action: { self.addItem(title: "Testing 123") }) {
                    Text("ADD ITEM")
                }
            }
        }
    }
}
#if DEBUG
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
        return ContentView().environment(\.managedObjectContext, context)
    }
}
#endif

Снимок экрана

enter image description here

1 Ответ

0 голосов
/ 03 апреля 2020

Исправлено недопустимое использование атрибутов в Базовых данных с именем "id". Поэтому я изменил это на «myId», и тогда все заработало нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...