2010-01-12 29 views
1

我使用NSOperation子类创建图像;生成线程以创建在imageView中显示的图像。这些图像被设置为一个阵列控制器中的一个键,该控制器绑定到imageview。NSImage _cacheSnapShotRep崩溃

用户正在随机报告应用程序崩溃,并且崩溃日志在调用选择器_cacheSnapshotRep()的线程中显示错误;我一直无法重现这一点,并没有什么会出现在网络搜索这个错误。

下面是从崩溃日志的相关章节:

Exception Type: EXC_BAD_ACCESS (SIGBUS) 
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000000000000 
Crashed Thread: 5 Dispatch queue: com.apple.root.default-priority 

Application Specific Information: 
objc_msgSend() selector name: _cacheSnapshotRep: 

和:

Thread 5 Crashed: Dispatch queue: com.apple.root.default-priority 
0 libobjc.A.dylib     0x90008edb objc_msgSend + 27 
1 com.apple.AppKit    0x962abd48 -[NSImage _usingBestRepresentationForRect:context:hints:body:] + 189 
2 com.apple.AppKit    0x962ab87e -[NSImage drawInRect:fromRect:operation:fraction:respectFlipped:hints:] + 1939 
3 com.apple.AppKit    0x962aa6a0 -[NSImage _drawMappingAlignmentRectToRect:withState:backgroundStyle:operation:fraction:flip:hints:] + 842 
4 com.apple.AppKit    0x963bfb95 -[NSImageCell drawInteriorWithFrame:inView:] + 821 
5 com.apple.AppKit    0x963bf7f9 -[NSImageCell drawWithFrame:inView:] + 2133 
6 com.apple.AppKit    0x9635066a -[NSControl drawRect:] + 589 
7 com.apple.AppKit    0x96348a99 -[NSView _drawRect:clip:] + 3510 
8 com.apple.AppKit    0x969ae107 -[_NSViewDrawOperation main] + 257 
9 com.apple.Foundation   0x9279c33b -[__NSOperationInternal start] + 811 
10 com.apple.Foundation   0x9279bf61 ____startOperations_block_invoke_2 + 94 
11 libSystem.B.dylib    0x922ac828 _dispatch_call_block_and_release + 16 
12 libSystem.B.dylib    0x9229ea5c _dispatch_worker_thread2 + 222 
13 libSystem.B.dylib    0x9229e4f1 _pthread_wqthread + 390 
14 libSystem.B.dylib    0x9229e336 start_wqthread + 30 

我有点迷失在何处与此去从这里,所以任何的建议是赞赏。

+0

是“_NSViewDrawOperation”你的课程吗? – 2010-01-13 20:57:45

回答

0

所以它看起来像是在我的子线程中使用非线程安全类造成的。

Apple's documentation给出了线程安全规则的一个很好的总结。

2
Exception Type: EXC_BAD_ACCESS (SIGBUS) 

看起来像一个内存管理问题,对我来说,NSZombieEnabledInstruments应该帮助你在寻找什么是错的,特别是如果你自己不能重现的错误。