Я делаю список аудио предметов из coredata. после удаления cra sh сообщает как «EXC_BREAKPOINT (code = 1, subcode = 0x1b8fb693 c)», почему?
При использовании
ForEach(items, id: \.self)
это работает. Но My Audio имеет свойство id и следует протоколу Identifiable.
ОБНОВЛЕНИЕ: Я обнаружил, что добавление условия if {} исправит cra sh, но почему? Точка останова в точке "stati c UUID. безусловно" BridgeFromObjective C ( :) () ".
struct Test1View: View {
@Environment(\.managedObjectContext) var context
@FetchRequest(fetchRequest: Audio.fetchAllAudios()) var items: FetchedResults<Audio>
var body: some View {
List {
ForEach(items) { item in
if true { // <- this if clause fix crash, but why?
HStack {
Text("\(item.name)")
}
}
}.onDelete(perform: { indexSet in
let index = indexSet.first!
let item = self.items[index]
self.context.delete(item)
try? self.context.save()
})
}
}
}
кодируется следующим образом:
class Audio: NSManagedObject, Identifiable {
@NSManaged public var id: UUID
@NSManaged public var name: String
@NSManaged public var createAt: Date
}
struct Test1View: View {
@Environment(\.managedObjectContext) var context
var fetchRequest: FetchRequest<Audio> = FetchRequest<Audio>(entity: Audio.entity(), sortDescriptors: [NSSortDescriptor(key: "createAt", ascending: false)])
var items: FetchedResults<Audio> { fetchRequest.wrappedValue }
var body: some View {
List {
ForEach(items) { item in
HStack {
Text("\(item.name)")
}
}.onDelete(perform: { indexSet in
let index = indexSet.first!
let item = self.items[index]
self.context.delete(item)
try? self.context.save()
})
}
}
}