本文介绍了再少数情况下,当访问CoreData托管对象中的NSSet关系属性引起App崩溃的现象以及解决.
现象
在访问托管对象的traces关系属性时,App崩溃,提示:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSMutableSet unionSet:]: set argument is not an NSSet'
traces的类型是NSSet.
实际的代码为:
if let ary = traces?.allObjects as? [HabitTrace]{
return ary
}
return []
我们再回溯一下崩溃时堆栈里值得注意的的信息:
0 CoreFoundation 0x00000001105611bb __exceptionPreprocess + 331
1 libobjc.A.dylib 0x000000010f49a735 objc_exception_throw + 48
2 CoreFoundation 0x00000001104ad4ec _CFThrowFormattedException + 194
3 CoreFoundation 0x00000001105499f5 -[NSMutableSet unionSet:] + 581
4 CoreData 0x000000010ff1f3c6 -[_NSFaultingMutableSet willReadWithContents:] + 934
5 CoreData