Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create NSPopover programmatically

i've didn't found some examples to create NSPopover dynamically instead using the Interface Builder.

Following code gives an exception, loaded nib, but no view is set:

NSViewController *controller = [[NSViewController alloc] initWithNibName:@"View"     bundle:nil];
NSPopover *popover = [[NSPopover alloc] init];
[popover setContentSize:NSMakeSize(100.0f, 100.0f)];
[popover setContentViewController:controller];
[popover setAnimates:YES];
[popover showRelativeToRect:[sender bounds] ofView:sender preferredEdge:NSMaxXEdge];
[popover release];
[controller release];

Here is the stack trace:

2011-10-22 12:00:16.804 Test[2020:707] -[NSViewController loadView] loaded the "View" nib    but no view was set.
2011-10-22 12:00:16.807 Test[2020:707] (
0   CoreFoundation                      0x00007fff87e10286 __exceptionPreprocess + 198
1   libobjc.A.dylib                     0x00007fff92f2cd5e objc_exception_throw + 43
2   CoreFoundation                      0x00007fff87e100ba +[NSException   raise:format:arguments:] + 106
3   CoreFoundation                      0x00007fff87e10044 +[NSException raise:format:] + 116
4   AppKit                              0x00007fff90951e21 -[NSViewController loadView] + 336
5   AppKit                              0x00007fff9094da8a -[NSViewController view] + 41
6   AppKit                              0x00007fff91065232 -[NSPopover showRelativeToRect:ofView:preferredEdge:] + 159
7   Test                                0x000000010000159a -[OITAppDelegate show:] + 570
8   CoreFoundation                      0x00007fff87dffa1d -[NSObject performSelector:withObject:] + 61
9   AppKit                              0x00007fff90924710 -[NSApplication sendAction:to:from:] + 139
10  AppKit                              0x00007fff90924642 -[NSControl sendAction:to:] + 88
11  AppKit                              0x00007fff9092456d -[NSCell _sendActionFrom:] + 137
12  AppKit                              0x00007fff90923a30 -[NSCell trackMouse:inRect:ofView:untilMouseUp:] + 2014
13  AppKit                              0x00007fff909a38e0 -[NSButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 489
14  AppKit                              0x00007fff9092263a -[NSControl mouseDown:] + 786
15  AppKit                              0x00007fff908ed0e0 -[NSWindow sendEvent:] + 6306
16  AppKit                              0x00007fff9088568f -[NSApplication sendEvent:] + 5593
17  AppKit                              0x00007fff9081b682 -[NSApplication run] + 555
18  AppKit                              0x00007fff90a9a80c NSApplicationMain + 867
19  Test                                0x00000001000012f2 main + 34
20  Test                                0x00000001000012c4 start + 52
21  ???                                 0x0000000000000003 0x0 + 3
like image 367
martin Avatar asked Oct 22 '11 10:10

martin


People also ask

How to create a popover using bootstrap with directions?

See the examples below to create a popover using bootstrap with directions. Use the attribute data-placement with the directional values given below. Add attribute data-placement to the anchor link or buttons with the value right and put your heading in the attribute title and information in the attribute data-content.

How to create a popover in HTML?

To create a simple Popover, you need to use the anchor links, buttons or any other HTML elements. On these elements, you have to add the attribute data-toggle="popover".

What is a popover?

A popover is the small overlays of content as like those on the iPad to display the secondary information of an element. Your user clicks on the element and the information comes out as an overlay.

What is an overlays popover?

An overlays popover contains the information in the form of the heading and content with information for the element. To create a simple Popover, you need to use the anchor links, buttons or any other HTML elements.


1 Answers

The problem is not in NSPopover; the exception is thrown by NSViewController, and it says that although nib load was successful, it's view property is still nil.

Open “View.nib” in Interface Builder and assign File Owner's view outlet to the view object that the controller is supposed to represent (NSViewContoller becomes the file owner when it loads a nib). This is done by Ctrl-dragging from File Owner icon to the view's icon, then choosing view from the list of outlets.

like image 90
hamstergene Avatar answered Oct 24 '22 20:10

hamstergene