• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Inconvenient exception impossible to get rid of?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Inconvenient exception impossible to get rid of?


  • Subject: Inconvenient exception impossible to get rid of?
  • From: Graham Cox <email@hidden>
  • Date: Tue, 03 Mar 2015 10:14:05 +1100

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.

--Graham



_______________________________________________

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


  • Follow-Ups:
    • Re: Inconvenient exception impossible to get rid of?
      • From: Keary Suska <email@hidden>
    • Re: Inconvenient exception impossible to get rid of?
      • From: Uli Kusterer <email@hidden>
  • Prev by Date: Re: NSTextField highlight
  • Next by Date: Re: Create a NSURL as a way to validate urls - not working
  • Previous by thread: Re: Create a NSURL as a way to validate urls - not working
  • Next by thread: Re: Inconvenient exception impossible to get rid of?
  • Index(es):
    • Date
    • Thread