2011-10-22 2 views
9

인터페이스 작성기 대신 동적으로 NSPopover를 만드는 예제를 찾지 못했습니다. 다음 코드프로그래밍 방식으로 NSPopover를 만드는 방법

예외로드 펜끝을 제공하지만, 더보기가 설정되어 있지 않은 : 여기

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]; 

스택 트레이스이다

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 

답변

15

문제는 NSPopover 아닌; 예외는 NSViewController에 의해 던져지고 nib로드가 성공했지만 view 속성은 여전히 ​​nil입니다.

인터페이스 빌더에서

열기 "View.nib을"및 컨트롤러 (그것이 펜촉을로드 할 때 NSViewContoller 파일의 소유자가) 대표하도록되어있는 뷰 객체에 파일 소유자view 콘센트를 할당합니다. 이 작업은 파일 소유자 아이콘에서보기 아이콘으로 Ctrl 키를 누른 상태에서 콘센트 목록에서 view을 선택하여 수행됩니다.

+1

이 오래된 질문에 대한 좋은 답변에 감사드립니다. 관련 질문 :이 예외가 * view * 콘센트를 할당하지 못함과 관련하여 - 예를 들어 popover의 * contentViewController * 콘센트를 지정하지 못한 것과 관련하여 어떻게 알았습니까? –

+1

@MarkBernstein이 메시지 텍스트가있는이 예외는 로딩에서'view' 속성을 할당하지 않은 경우에만 발생합니다. – hamstergene

관련 문제