使用 "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 内部问题),事实证明确实如此。
我经常收到这样的堆栈跟踪崩溃报告:
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 内部问题),事实证明确实如此。