2010-02-13 41 views
3

當我嘗試使用NSImage中的imageFromRect裁剪圖像,我得到一個EXEC_BAD_ACCESS崩潰時約50%。這是在啓動時運行的(在awakeFromNib中觸發的),所以環境不應該改變。我不知道它爲什麼會崩潰一個啓動而不是另一個。當我裁剪圖像之前設置了斷點時,我可以看到圖像正確地從文件加載,並且似乎具有適當的尺寸。有什麼建議?NSImage中轟然作物

這裏是堆棧跟蹤:

#0 0x97bb58c2 in ripc_RemoveEntry 
#1 0x97b927b0 in ripc_AcquireImage 
#2 0x97b903be in ripc_DrawImage 
#3 0x930f9384 in CGContextDrawImage 
#4 0x9463159f in __-[NSBitmapImageRep draw]_block_invoke_1 
#5 0x9448e74b in __-[NSBitmapImageRep _performBlockUsingBackingCGImage:]_block_invoke_1 
#6 0x94365232 in -[NSBitmapImageRep _performBlockUsingBacking:] 
#7 0x9448e6b3 in -[NSBitmapImageRep _performBlockUsingBackingCGImage:] 
#8 0x9462f87f in -[NSBitmapImageRep draw] 
#9 0xb0006a03 in -[NSImage(Crop) imageFromRect:] at ThemeManager.m:325 
#10 0xb000820a in -[FrameImages setImage:] at ThemeManager.m:270 
#11 0xb0005f21 in -[ThemeManager setImage:forTheme:] at ThemeManager.m:63 
#12 0xb0006397 in +[ThemeManager defaultThemeManager] at ThemeManager.m:39 
#13 0xb0005b33 in -[SCThemedView layoutContentView] at SCThemedView.m:92 
#14 0x9435ebaf in -[NSNibOutletConnector establishConnection] 
#15 0x9435d33b in -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] 
#16 0x9435b450 in loadNib 
#17 0x9435a848 in +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] 
#18 0x9435a759 in +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:] 
#19 0x9435a6a4 in +[NSBundle(NSNibLoading) loadNibNamed:owner:] 
#20 0x943574a9 in NSApplicationMain 
#21 0x0000256a in start 
+0

你可能需要從發佈您的代碼 - [NSImage中(作物)imageFromRect:]。此外,該方法名稱過於通用,無法在沒有前綴的類別中添加。 – Ken 2010-02-13 08:02:40

回答

0

向我們展示你是如何加載圖像。這種崩潰通常是在完成之前釋放對象的結果。

+0

這是一個垃圾回收應用程序。我沒有對指針做任何奇怪的事情,所以它不應該太快釋放。 – Bridgeyman 2010-02-13 05:22:39

0

有堆棧跟蹤中沒有awakeFromNib;相反,看起來在nib加載程序仍在進行連接([NSNibOutletConnector establishConnection])時發生崩潰,這意味着繪圖環境可能尚未正確設置。

嘗試將SCThemedView的layoutContentView方法移動到SCThemedView的awakeFromNib的ThemeManager設置代碼(無論是打電話給[ThemeManager defaultThemeManager])。

如果還是不行,請嘗試延緩所有ThemeManager layout /繪圖直到的NSApplication的applicationDidFinishLaunching:方法被調用後。