Index Beyond Bounds / EXC_BAD_ACCESS 核心数据删除 SwiftUI

Posted

技术标签:

【中文标题】Index Beyond Bounds / EXC_BAD_ACCESS 核心数据删除 SwiftUI【英文标题】:Index Beyond Bounds / EXC_BAD_ACCESS upon Core Data Delete SwiftUI 【发布时间】:2020-04-29 13:18:04 【问题描述】:

尝试在 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 上。

问题可能在于生成视图而不是删除?

请注意,在编码方面,我是一个自学成才的绝对菜鸟,所以我可能在这里遗漏了一些明显的东西。对于以说明的形式自己获得答案的任何帮助也将不胜感激(这样我就可以学习如何解决这个问题)。

编辑:

我想我找到了导致问题的原因。在另一个视图中,我还生成了所有dates 的列表,我在Dates 上应用了索引。现在将修改代码以查看是否可以修复它....

待定!

【问题讨论】:

【参考方案1】:

在单独的视图中,我按以下方式调用日期列表:

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

删除其中一个 Date 实体会弄乱此视图中显示的索引。将此结构更改为以下解决了该问题:

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

【讨论】:

以上是关于Index Beyond Bounds / EXC_BAD_ACCESS 核心数据删除 SwiftUI的主要内容,如果未能解决你的问题,请参考以下文章

调用“[super layoutSubviews]”会抛出“[__NSArrayM objectAtIndex:]: index 1 beyond bounds”异常

NSRangeException',原因:'*** -[__NSArrayI objectAtIndex:]: index 2 beyond bounds [0 .. 1] CoreData 和 NS

如何在我的场景中纠正此错误_NSArrayM objectAtIndex:]: index 8 beyond bounds [0 .. 7]'

由于未捕获的异常“NSRangeException”而终止应用程序,原因:“-[__NSCFArray objectAtIndex:]: index (14) beyond bounds (14)”

*** 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“*** -[__NSArrayI objectAtIndex:]: index 3 beyond bounds [0

*** 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“*** -[__NSArray0 objectAtIndex:]: index 0 beyond bounds fo