SwiftUI / Core Data: Cra sh при использовании Save () для контекста управляемого объекта, вызываемого из модификатора .onDelete - PullRequest
1 голос
/ 29 января 2020

В моем приложении SwiftUI у меня есть модификатор .onDelete SwiftUI (в Навигационном представлении, Списке, ForEach, Link и т. Д. c.), Который я использую для удаления объекта объекта основных данных. Все в порядке, вплоть до удаления основного объекта данных. Cra sh происходит, когда я вызываю .Save () в контексте управляемого объекта. Потянул меня за волосы, пытаясь выяснить, почему. Вот снимок кода:

        List {
            ForEach(claims, id: \.self.id) {(tmpClaim: Claim) in
                NavigationLink(destination: EditClaimView(passedClaim: tmpClaim, uuidString: tmpClaim.id.uuidString)) {
                    HStack {
                        VStack(alignment: .leading, spacing: 5) {
                            Text(tmpClaim.providerName)
                                .font(.headline)
                            Text("\(tmpClaim.serviceDate, formatter: DateFormatter.editing)")
                                .font(.footnote)
                        }
                        Spacer()
                        Text("\(String(describing: tmpClaim.serviceAmount).currencyFormatting())")
                    }
                    .contextMenu {
                        Button(action:
                            {
                                // code to create a new claim is here
})
                            {
                                Text("Duplicate")
                                Image(systemName: "doc.on.doc")
                            }
                    }
                }
            }
            .onDelete { indexSet in
                for index in indexSet {
                    (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext.delete(self.claims[index])
                }
if (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext.hasChanges {
                    do {
                        try (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext.save()
                    } catch {
                        print(error.localizedDescription)
                    }
                }
            }

cra sh происходит при вызове .save (), и текст ошибки или сообщение не выдаются. Если я переместу вызов save () к другому модификатору, модификатору .OnDisappear () SwiftUI, не будет cra sh:

.onDelete { indexSet in
                for index in indexSet {
                    (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext.delete(self.claims[index])
                }
            }

.onDisappear() {
                if (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext.hasChanges {
                    do {
                        try (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext.save()
                    } catch {
                        print(error.localizedDescription)
                    }
                }
            }

Кроме того, я попытался поместить его в функцию и абстрагироваться в это и вызов функции из модификатора .onDelete () и т. д. c. Так что использование .OnDelete () и .onDisppear (), кажется, работает и просто немного задерживает сохранение, но я думаю, что это должно работать в самом .onDelete.

Любая помощь и идеи по это очень ценится. Спасибо ...

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