2013-08-08 3 views
0

프로그래밍 방식으로 여러 상태 메뉴 항목을 추가해야합니다. 이전에 NSStatusItem을 사용한 적이 없습니다. 다음은 내가 가지고있는 것입니다.NSStatusItem의 액션을 통해 변수 전달하기

- (void)showStatus { 
    for (NSInteger i4 = 0; i4 < alertArray4.count; i4++) { 
     NSString *person = [[alertArray4 objectAtIndex:i4] objectForKey:key4e]; 
     NSString *imagepath = [[alertArray4 objectAtIndex:i4] objectForKey:key4f]; 
     NSString *nextDOB = [[alertArray4 objectAtIndex:i4] objectForKey:key4h]; 
     NSImage *personimage; 
      if ([imagepath isEqualToString:@"0"]) { 
       personimage = [self imageResize:[NSImage imageNamed:@"userNone"] newSize:NSMakeSize(16.0f,16.0f)]; 
      } 
      else { 
       personimage = [self imageResize:[NSImage imageNamed:@"userOne"] newSize:NSMakeSize(16.0f,16.0f)]; 
      } 
      NSString *menuTitle = [NSString stringWithFormat:@"%@ in %@ days",person,nextDOB]; 
      NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:menuTitle action:@selector(statusItemClicked:) keyEquivalent:@""]; 
      [menuItem setImage:personimage]; 
     } 
    statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength]; 
    statusImage = [NSImage imageNamed:@"appIcon16"]; 
    [statusItem setImage:statusImage]; 
    [statusItem setMenu:statusMenu]; 
    [statusItem setTitle:alertCount.stringValue]; 
} 

- (void)statusItemClicked:(NSString *)num { 
    NSLog(@"Hello"); 
} 

그리고 항목 수 = i4 인 상태 메뉴가 게시됩니다. 내가 이해할 수없는 것은 statusItemClicked에 변수를 전달하여 응용 프로그램이 사용자가 선택한 menuitem을 알 수 있도록하는 방법입니다. 그렇다면 statusItemClicked에 변수 (i4)를 보내려면 어떻게해야합니까? performSelectorInBackground을 사용하는 경우 이라는 변수를 추가 할 수 있습니다. 나는이 경우에 그렇게 할 수 없다고 생각한다.

도움 주셔서 감사합니다.

+0

사전 (문자열에있는 메뉴 항목을지도), I 중복을 찾고 오전의 Obj-C 관련 객체 API 등 ... –

+0

는 것 같습니다. –

+1

여기 있습니다 : http://stackoverflow.com/questions/1508453/actionselectorshowalert-how-to-pass-parameter-in-this-showalert-method이게 당신이 찾고있는 것인지 알려주세요. –

답변

0

정확히 어떻게 작동하는지 모르겠습니다. 어쨌든, 나는 다음과 같이 끝내었고, 나를 만족하게 해주었다. 내가 setRepresentedObject를 사용할 필요가 같은

- (void)showStatus { 
for (NSInteger i4 = 0; i4 < alertArray4.count; i4++) { 
    ... 
    NSString *num4 = [NSString stringWithFormat:@"%li",(long)i4]; 
    NSString *menuTitle = [NSString stringWithFormat:@"%@ in %@ days",person,nextDOB]; 
    NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:menuTitle action:@selector(statusItemClicked:) keyEquivalent:@""]; 
    [menuItem setTarget:self]; 
    [menuItem setRepresentedObject:num4]; 
} 
statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength]; 
statusImage = [NSImage imageNamed:@"appIcon16"]; 
[statusItem setImage:statusImage]; 
[statusItem setMenu:statusMenu]; 
[statusItem setTitle:alertCount.stringValue]; 
} 

- (void)statusItemClicked:(id)sender { 
    id selectedItem = [sender representedObject]; 
    NSLog(@"%@",selectedItem); 
}