Я написал небольшое приложение, которое использует Core Data вместе с SwiftUI, чтобы сделать базовое приложение для заметок для старых приключенческих игр. Я использую NavigationView в конфигурации master / detail, где master list - это список имен людей, для которых предназначены заметки (это разработано для игр, таких как Tex Murphy), и при нажатии на них в подробном представлении отображаются некоторые текстовые поля. изменить детали.
Ошибка, которую я бью, заключается в том, что если у меня есть текстовое поле, влияющее на имя человека. Иногда, когда я меняю имя, происходит сбой приложения с: Поток 1: EXC_BAD_INSTRUCTION (код = EXC_i386_INVOP, субкод = 0x0). Этот сбой является относительно случайным, когда он может произойти около 10% времени. Если я сделаю основной вид вместо того, чтобы показывать любой другой текст, кроме имени человека, то он не падает. Обеспечение изменения имени только в главном потоке не имеет никакого эффекта, поэтому я не думаю, что это проблема безопасности потока. К сожалению, отладчик здесь не особо полезен, поскольку я не могу изолировать его при сбое.
Есть идеи?
Вот код для изменения имени человека:
TextField("Enter name", text: $name) {
self.person.name = self.name
do {
try self.managedObjectContext.save()
} catch {
print(error)
}
}
Где person - это объект person, отправляемый через NavigationView, а name - значение состояния (поскольку я не уверен, как текстовое поле может изменить имя человека напрямую)