核心数据删除SwiftUI后,索引越界/ EXC_BAD_ACCESS

时间:2020-04-29 13:18:04

标签: core-data swiftui exc-bad-instruction

尝试在SwiftUI中删除Core Data索引时遇到Index Beyond Bounds错误和Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

基本上,我有一个核心数据实体(Dates),它仅包含一个date属性(约束-字符串)。这与我的Records实体一对多关系。我正在尝试显示所有date的列表。可以正常显示,但是尝试删除它后,我的应用崩溃了。

我的视图当前如下所示:

import SwiftUI

struct Settings: View {
    @Environment(\.managedObjectContext) var managedObjectContext
    @FetchRequest(entity: Dates.entity(), sortDescriptors: []) var dates: FetchedResults<Dates>


    var body: some View {
            VStack {
                List{
                ForEach(dates, id: \.self) { day in
                    Text("\(day.wrappedDate)")
                }.onDelete { (indexSet) in
                let dateToDelete = self.dates[indexSet.first!]
                self.managedObjectContext.delete(dateToDelete)
                do {
                    try self.managedObjectContext.save()
                } catch {
                    print(error)
                }
                }
                }
        }
    }
}

我已经将我的观点细分为最低限度,以查看是否有帮助,但不幸的是没有。

尝试删除时。我在输出中得到的错误是:

2020-04-29 16:08:23.980755+0300 TESTTEST[28270:2245700] [General] *** -[__NSArray0 objectAtIndex:]: index 0 beyond bounds for empty NSArray

如果我说9个日期,它会说index 8 beyond bounds [0 .. 7],所以它不一定与空数组有关。

进一步的输出是:

=== AttributeGraph: cycle detected through attribute X ===

很多次,然后:

Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

在我的AppDelegate上。

问题可能出在生成视图中,而不是删除中吗?

请注意,在编码方面,我是一个自学成才的绝对Noob,因此在这里我可能会遗漏一些明显的东西。对于以说明形式自行解答的任何帮助,也将不胜感激(因此我可以学习如何解决此问题)。

编辑:

我想我找出了导致问题的原因。在另一个视图中,我还生成了所有date的列表,在其中我对Dates应用了索引。现在将修改代码,看看是否可以解决。...

TBC!

1 个答案:

答案 0 :(得分:0)

在另一个视图中,我通过以下方式调用日期列表:

ForEach(0 ..< self.dates.count, id: \.self) { index in
       Text("\(self.dates[index].date)")
}

删除日期实体之一,将使此视图中显示的索引混乱。将此结构更改为以下内容可解决此问题:

ForEach(self.dates, id: \.self) { day in
Text("\(day.date)")
}