NSImage裁剪崩溃

3

当我尝试使用NSImage的imageFromRect裁剪图像时,约50%的时间会出现EXEC_BAD_ACCESS崩溃。这是在启动时运行的事情(在awakeFromNib中触发),因此环境不应该发生变化。我不确定为什么它会在一次启动时崩溃而在另一次启动时则不会。当我在裁剪图像之前设置断点时,我可以看到图像已从文件正确加载,并且似乎具有正确的尺寸。有什么建议吗?

以下是堆栈跟踪:

#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

你可能需要发布来自-[NSImage(Crop) imageFromRect:]的代码。此外,该方法名称过于通用,无法在没有前缀的类别中添加。 - Ken
2个回答

0

请展示一下您如何加载图像。通常情况下,这种崩溃是由于在您使用完对象之前该对象被释放了。


这是一个垃圾回收的应用程序。我没有对指针做任何奇怪的操作,所以它不应该被过早释放。 - Bridger Maxwell

0

堆栈跟踪中没有awakeFromNib;相反,它看起来像是在nib加载器仍在进行连接过程中崩溃([NSNibOutletConnector establishConnection]),这意味着绘图环境可能尚未正确设置。

尝试将ThemeManager设置代码(调用[ThemeManager defaultThemeManager]的任何内容)从SCThemedView的layoutContentView方法移动到SCThemedView的awakeFromNib中。

如果这样不行,请尝试延迟所有ThemeManager布局/绘图,直到调用NSApplication的applicationDidFinishLaunching:方法之后再执行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接