使用 "To Many" 关系条目的“.allObjects”时,SwiftUI + Core Data 崩溃

SwiftUI + Core Data crash when using `.allObjects` of a "To Many" relationship entry

我经常收到这样的堆栈跟踪崩溃报告:

0   libobjc.A.dylib                 0x0000000199e6a334 object_getMethodImplementation + 48 (objc-object.h:97)
1   CoreFoundation                  0x00000001853d35a4 _NSIsNSSet + 40 (NSObject.m:381)
2   CoreFoundation                  0x00000001852a6888 -[NSMutableSet unionSet:] + 108 (NSSet_Internal.h:56)
3   CoreData                        0x000000018b4af3b0 -[_NSFaultingMutableSet willReadWithContents:] + 636 (_NSFaultingMutableSet.m:167)
4   CoreData                        0x000000018b53c3a0 -[_NSFaultingMutableSet allObjects] + 32 (_NSFaultingMutableSet.m:340)

我的代码正在执行以下操作,这是在自动生成的核心数据中 class(我在扩展中使用下面的代码 class):

if let tasks = tasks?.allObjects as? [Task] {
}

其中 tasks@NSManaged public var tasks: NSSet?,这是来自核心数据(自动生成的)的“数组”对象。

任何想法这里出了什么问题,也许这是一个核心数据问题本身,SwiftUI + 核心数据出于某种原因。

我就是这样做的,作为 class 扩展中的计算 属性,从来没有出现过问题。

var allTasks: [Task] {
tasks?.allObjects as? [Task] ?? [ ]
}

您可以在里面添加 if let 并进行任何排序或过滤,然后 return 那。

使用最新的 SwiftUI 3,我不再看到此崩溃。

最初这正是我所认为的问题根源(SwiftUI 内部问题),事实证明确实如此。