views:

949

answers:

2

While running my application (which does a good bit of custom drawing) I get this error (it happens a good bit with no observable side effects, but I'd like to understand what's happening).

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

So I set that breakpoint and get this stack. None of the stack frames are my code, though certainly I have overridden NSView's drawRect in some cases.

Has anyone seen this before or have insight as to what is happening?

#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  A: 

I recently had exactly the same message in the console.
In my case I was updating a progress indicator the wrong way.
My progress indicator was displayed on a sheet and I was not correctly dismissing the sheet. The errors always popped up the second time I displayed the NSSheet with beginSheet
Are you using an NSSheet?
For me it worked to:

  1. pass an didEndSelector to beginSheet.
  2. A [sheet close]; within that selector
  3. and finally a [NSApp endSheet] to dismiss the sheet
weichsel
This sounds promising. I am, in fact, updating a progress indicator, but am not using an NSSheet (explicitly anyway).
nall
How did you debug your issue, btw?
nall
weichsel
+1  A: 

It turns out I was requesting the NSProgressIndicator to display from a non-main thread. Once I removed this the messages went away.

nall