需要帮助理解“kCGErrorIllegalArgument:CGSUnionRegionWithRect:Invalid Region”

时间:2009-10-20 18:33:53

标签: objective-c cocoa core-animation core-graphics

在运行我的应用程序时(它做了很多自定义绘图)我得到了这个错误(它发生了很多没有可观察到的副作用,但我想了解发生了什么)。

<Error>: kCGErrorIllegalArgument: CGSUnionRegionWithRect : Invalid region
<Error>: kCGErrorFailure: Set a breakpoint @ CGErrorBreakpoint() to catch
         errors as they are logged.

所以我设置了断点并获得了这个堆栈。没有任何堆栈帧是我的代码,但在某些情况下我肯定已经覆盖了NSView的drawRect。

有没有人以前见过这个或者对正在发生的事情有所了解?

#0  0x94bee5f2 in CGErrorBreakpoint ()
#1  0x94c831d8 in CGSGlobalErrorv ()
#2  0x94a64b61 in CGSUnionRegionWithRect ()
#3  0x912a2a70 in -[NSRegion addRegion:] ()
#4  0x912a28c1 in -[NSWindow _setNeedsDisplayInRegion:] ()
#5  0x911f3548 in -[NSWindow _absorbDeferredNeedsDisplayRegion] ()
#6  0x911f2113 in -[NSView _sendViewWillDrawInRect:clipRootView:suppressRecursion:] ()
#7  0x91154ee9 in -[NSView displayIfNeeded] ()
#8  0x9111e292 in -[NSWindow displayIfNeeded] ()
#9  0x9114f764 in _handleWindowNeedsDisplay ()
#10 0x9408eb02 in __CFRunLoopDoObservers ()
#11 0x9404b65d in __CFRunLoopRun ()
#12 0x9404ad34 in CFRunLoopRunSpecific ()
#13 0x9404ab61 in CFRunLoopRunInMode ()
#14 0x97984fec in RunCurrentEventLoopInMode ()
#15 0x97984da3 in ReceiveNextEventCommon ()
#16 0x97984c28 in BlockUntilNextEventMatchingListInMode ()
#17 0x91125c95 in _DPSNextEvent ()
#18 0x9112550a in -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] ()
#19 0x910e769b in -[NSApplication run] ()
#20 0x910df735 in NSApplicationMain ()
#21 0x00002a4f in main (argc=0x1, argv=0xbffff4d4) at 
                  /Users/me/Code/myapp/src/main.m:19

2 个答案:

答案 0 :(得分:4)

我最近在控制台中有完全相同的消息 就我而言,我是以错误的方式更新进度指示器 我的进度指示器显示在工作表上,而我没有正确地解除工作表。 第二次使用beginSheet显示NSSheet时,错误总是会弹出 您使用的是NSSheet吗? 对我而言,它起作用了:

  1. didEndSelector传递给。{ beginSheet
  2. 其中的[sheet close]; 选择
  3. 最后是[NSApp endSheet]以解散表格

答案 1 :(得分:3)

事实证明我正在请求NSProgressIndicator从非主线程显示。一旦我删除了这些消息就消失了。