我有一个垃圾收集的CoreData应用程序,我的一些朋友使用它。这是一个相当标准的应用程序,其中核心数据条目显示在表视图上。
其中一些报告了以下神秘的崩溃报告,这些报告是由表格视图的排序标准的变化触发的。
Application Specific Information:
objc_msgSend() selector name: objCType
objc[1415]: garbage collection is ON
Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 libobjc.A.dylib 0x00007fff885bf10a objc_msgSend + 22
1 com.apple.Foundation 0x00007fff82a80f91 -[NSNumber compare:] + 102
2 com.apple.Foundation 0x00007fff82aa9c9a _NSCompareObject + 75
3 com.apple.Foundation 0x00007fff82ae1ab9 _NSSortFunctionMany + 626
4 com.apple.CoreFoundation 0x00007fff87f24419 __CFSimpleMergeSort + 409
5 com.apple.CoreFoundation 0x00007fff87f242d8 __CFSimpleMergeSort + 88
....
15 com.apple.CoreFoundation 0x00007fff87f242d8 __CFSimpleMergeSort + 88
16 com.apple.CoreFoundation 0x00007fff87f240cd CFSortIndexes + 317
17 com.apple.CoreFoundation 0x00007fff87f56a23 CFMergeSortArray + 147
18 com.apple.Foundation 0x00007fff82aa99f3 _sortedObjectsUsingDescriptors + 572
19 com.apple.Foundation 0x00007fff82ae162a -[NSMutableArray(NSKeyValueSorting) sortUsingDescriptors:] + 440
20 com.apple.AppKit 0x00007fff84f06ad8 -[NSArrayController _sortObjects:] + 337
21 com.yujitach.spires 0x00000001000225e0 -[IncrementalArrayController arrangeObjects:] + 194
此处,IncrementalArrayController
是NSArrayController
的子类。我不明白为什么从CoreData返回的Objective-C数组的arrangeObjects:
会导致崩溃。
它与我的程序的多线程有关吗?我遵循文档所说的:每个线程都有一个MOC,我不会跨线程传递托管对象,只传递托管对象ID。
如果有人可以建议我如何调试它,我会很感激。例如我想看看哪个对象导致objc_msgSend
崩溃。我该如何追踪它?
如果您需要源代码,可以通过bzr
:
$ bzr branch http://www.sns.ias.edu/~yujitach/spires/code/
答案 0 :(得分:0)
早期版本的10.6中存在一个错误,涉及在垃圾收集的应用程序中对非常大的数组进行排序。修复程序正在更新中。