2013-03-17 2 views
3

나는이 예제를 올바르게 따르고 있다고 생각합니다. OSX/Cocoa 상태 표시 줄 항목 생성 문제 (Apple 가이드가 작동하지 않음)

@interface AppDelegate : NSObject <NSApplicationDelegate> { 
NSStatusItem *testItem; 
NSMenu *testMenu; 
} 

(https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/StatusBar/Tasks/creatingitems.html)

...

@implementation AppDelegate 


- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    testMenu = [[NSMenu alloc] init]; 
    [testMenu addItemWithTitle:@"An Item" action:nil keyEquivalent:nil]; 
    [testMenu addItemWithTitle:@"Another Item" action:nil keyEquivalent:nil]; 

    NSStatusBar *bar = [NSStatusBar systemStatusBar]; 

    testItem = [[NSStatusItem alloc] init]; 
    testItem = [bar statusItemWithLength:NSVariableStatusItemLength]; 
    [testItem setTitle: @"X"]; 
    [testItem setHighlightMode:YES]; 
    [testItem setMenu:testMenu]; 
    [testItem setEnabled:YES]; 
} 

나는 구축하고 실행. 표시되는 새 상태 표시 줄 항목이 없습니다. 왜 안돼? 내가 무지한 초보자인데 용서해 줘. 나는 근본적인 무언가를 간과하고 있다고 가정한다.

+0

아마도 상태 표시 줄이 꽉 차서 NSStatusBar에서 메뉴 항목의 공간을 찾을 수 없습니다. 그것이 nil인지 확인하십시오. 대개 공간을 찾을 수 없다면 어떻게되는지 확인하십시오. – CodaFi

+0

ARC를 사용하고 있습니까? –

답변

5

keyEquivalentaddItemWithTitle에 대해서는 0 일 수 없습니다. 그렇게하면 예외가 발생하여 해당 행을 지나칠 수 없습니다. 이 두 줄을 다음과 같이 변경하십시오.

[testMenu addItemWithTitle:@"An Item" action:nil keyEquivalent:@"a"]; 
[testMenu addItemWithTitle:@"Another Item" action:nil keyEquivalent:@"i"]; 

이제 모든 것이 올바르게 작동합니다. 디버거의 출력을보고 이러한 종류의 문제를 해결할 수 있습니다. 이 경우 올바른 단서를 제공 한 출력은 "유효하지 않은 매개 변수가 잘못되었습니다 : charCode! = nil"입니다.

당신은 NSMenu's documentation에서 더 얻을 수 있습니다

문자열이 메뉴 항목에 대한 해당하는 키로 사용하는 키를 식별. 메뉴 항목에 해당하는 키가 없도록하려면 keyEquiv가 빈 문자열 (@ "")이어야하며 nil이 아니어야합니다.

+0

사실! 또한, keyEquivalent를 원하지 않는다면 빈 문자열을 제공하고 Command-A를 사용하려면 @ "a"(@ "A"가 아님)를 사용하십시오. –

+0

@DigiMonk 우수 포인트. – vcsjones

0

나는 그것이 근본적인 것임을 알았다. 내가 제일 먼저 확인 했어야 했어. - (void)applicationDidFinishLaunching:(NSNotification *)aNotification이 (가) 호출되지 않았습니다. 이제 해결되었습니다.