gpt4 book ai didi

objective-c - 具有自定义 View 的 NSMenuItem 不会更新

转载 作者:行者123 更新时间:2023-12-03 17:30:24 25 4
gpt4 key购买 nike

我有一个带有自定义 View 的 NSMenuItem。但是,当我想更新菜单中的第一行时,它会添加 xib 文件中的内容,而不是我设置的内容。

我的代码: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: Paul@******.se

结果:
Result

最佳答案

当你这样做时:

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

它只创建 View Controller 。它实际上并不从 Nib 加载 View 。当您访问这些属性时,它们很可能nil,因为 View 尚未加载(并且尚未建立连接)。

如果您将代码更新为以下内容,一切都会正常工作:

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

关于objective-c - 具有自定义 View 的 NSMenuItem 不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9637240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com