2012-03-09 8 views
0

私はカスタムビューを持つNSMenuItemを持っています。しかし、メニューの最初の行を更新したいときは、xibファイルの内容をそのまま設定します。カスタムビューのNSMenuItemは更新されません

マイコード: AppDelegate.m:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    _helper = [[Helper alloc] init]; 

    statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength]; 
    [statusItem setMenu:self.statusMenu]; 
    [statusItem setTitle:@"GravAccount"]; 
    [statusItem setHighlightMode:YES]; 

    _gravatarLoader = [[GravatarLoader alloc] initWithTarget:self andHandle:@selector(setGravatarImage:)]; 

    // Get email address 
    _email = [_helper getEmailAddress]; 

    if (_email != nil) 
    { 
     [_gravatarLoader loadEmail:_email withSize:50.0]; 
    } 
} 

- (void)setGravatarImage:(NSImage*)image 
{ 
    NSLog(@"Image loaded!"); 

    GravatarMenuItem *menuItem = [[GravatarMenuItem alloc] initWithNibName:@"GravatarMenuItem" bundle:nil]; 
    [menuItem.label setTitle:_email]; 
    [menuItem.imageView setImage:image]; 

    NSLog(@"Email: %@", _email); 

    NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""]; 
    [item setView:menuItem.view]; 

    [self.statusMenu removeItemAtIndex:0]; 
    [self.statusMenu insertItem:item atIndex:0]; 
} 

GravatarMenuItem.h:

#import <Cocoa/Cocoa.h> 

@interface GravatarMenuItem : NSViewController 

@property (nonatomic, strong) IBOutlet NSImageView *imageView; 
@property (nonatomic, strong) IBOutlet NSTextFieldCell *label; 

@end 

出口は、ファイルの所有者にXIBファイルにリンクされています。

これが結果です: ログイン:

2012-03-09 16:57:24.314 appName[51158:403] Image loaded! 
2012-03-09 16:57:24.316 appName[51158:403] Email: [email protected]******.se 

結果:
Result

答えて

5

あなたは:

GravatarMenuItem *menuItem = [[GravatarMenuItem alloc] initWithNibName:@"GravatarMenuItem" bundle:nil]; 

それが唯一のビューコントローラを作成します。実際にはペン先からビューをロードしません。プロパティにアクセスすると、ビューがロードされていないため(接続が確立されていないため)、nilの可能性が高くなります。たくさん

GravatarMenuItem *menuItem = [[GravatarMenuItem alloc] initWithNibName:@"GravatarMenuItem" bundle:nil]; 
[menuItem view]; // load the view from the nib 
[menuItem.label setTitle:_email]; 
[menuItem.imageView setImage:image]; 
+0

ありがとう:あなたはあなたのコードは次のように更新した場合

することは、すべてが正常に動作するはずです。それは本当に簡単でしたが、私はそれを見つけられませんでした。 –

関連する問題