Re: Inconvenient exception impossible to get rid of?
Re: Inconvenient exception impossible to get rid of?
- Subject: Re: Inconvenient exception impossible to get rid of?
- From: Keary Suska <email@hidden>
- Date: Mon, 02 Mar 2015 17:43:48 -0700
On Mar 2, 2015, at 4:14 PM, Graham Cox <email@hidden> wrote:
> I'm getting an exception thrown by the NSPopover code when a popover is going away. Due to the way popovers are handled, the exception is not one I'm able to catch, so the app is terminated. This is a very big punishment for what seems a trivial transgression that doesn't even matter at this time, nor one I have any apparent control over.
>
> Here's the upper part of the stack trace of the exception:
>
> 2015-03-03 09:59:07.164 LogicBoard[44305:3418051] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'The contentViewController ((null)) or contentViewController.view is nil.'
> *** First throw call stack:
> (
> 0 CoreFoundation 0x00007fff90bdc66c __exceptionPreprocess + 172
> 1 libobjc.A.dylib 0x00007fff869f776e objc_exception_throw + 43
> 2 CoreFoundation 0x00007fff90bdc51d +[NSException raise:format:] + 205
> 3 AppKit 0x00007fff8958e89d -[NSPopover showRelativeToRect:ofView:preferredEdge:] + 249
> 4 AppKit 0x00007fff89bff304 __53-[NSPopover showRelativeToRect:ofView:preferredEdge:]_block_invoke + 94
> 5 AppKit 0x00007fff895ac6aa -[NSPopover _executeClosingBlock] + 31
> 6 AppKit 0x00007fff895ac517 -[NSPopover _finishClosingAndShouldNotify:] + 197
> 7 AppKit 0x00007fff89491204 -[NSWindow _windowTransformAnimationDidEnd:] + 380
> 8 libdispatch.dylib 0x000000010025c2bb _dispatch_call_block_and_release + 12
> 9 libdispatch.dylib 0x0000000100256d43 _dispatch_client_callout + 8
> 10 libdispatch.dylib 0x0000000100265d9f _dispatch_main_queue_callback_4CF + 1370
> 11 CoreFoundation 0x00007fff90b2fc79 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
> 12 CoreFoundation 0x00007fff90aec30f __CFRunLoopRun + 2159
>
>
> What it's complaining about is that the viewController, or its view, is nil. The thing is, I do supply this controller and the view is there - in fact it's been successfully displayed, interacted with and dismissed by this point - this stack trace is the result of dismissing the popover after I'm done with it. At this time, it shouldn't care whether it has a view controller or a view - presumably it will release the view controller it holds anyway at this time, so it appears as if the exception is completely spurious.
>
> This is happening on 10.10. It's been a while since I worked on this code, last time was under 10.8, and I don't recall that I was getting this exception in the same situation there.
>
> This is the code that displays the popover. It's not very interesting, and the try/catch block here doesn't trap the above exception, because it's actually nothing to do with it, even though at first glance it appears to be thrown by the same function.
>
> - (void) displayPopoverForDeviceLayer:(LB_DeviceLayer*) dvl
> {
> NSRect popRect = dvl.frame;
> NSViewController* devViewController = [dvl viewControllerForAuxiliaryContent];
>
> if( devViewController )
> {
> self.auxiliaryContentPopover.contentViewController = devViewController;
> self.auxiliaryContentPopover.behavior = NSPopoverBehaviorSemitransient;
>
> NSView* contentView = devViewController.view;
>
> NSAssert( contentView, @"no view supplied by controller"); //<---- never asserts, there is always a controller and view here
>
> self.auxiliaryContentPopover.contentSize = contentView.frame.size;
>
> @try
> {
> [self.auxiliaryContentPopover showRelativeToRect:popRect ofView:self preferredEdge:NSMaxXEdge];
> }
> @catch (NSException *exception)
> {
> NSLog(@"huh?!"); //<---- never invoked
> }
> }
> }
>
> Is this just a case of the popover code on 10.10 being over-zealous about asserting that it has a controller, even though it doesn't need one once the popover is dismissed?
>
> I'm at a loss as to how to sort this problem out - the closure block for the popover is invoked automatically, not by my code, so I'm not seeing any way to fix this.
Maybe it wants the view around for some closing animation. Does making animates NO change anything? Also, are you really unable to keep the view or view controller around until the popover is completely closed (maybe NSPopoverDidCloseNotification, but I can't day for sure).
HTH,
Keary Suska
Esoteritech, Inc.
"Demystifying technology for your home or business"
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden