Objective c 是否从其他类设置NSStatusBar标题?

Objective c 是否从其他类设置NSStatusBar标题?,objective-c,cocoa,macos,Objective C,Cocoa,Macos,我正在尝试从另一个类“我的首选项”类更改NSStatusBar中的标题 在我的ManagerClass.m&h中,我已声明 - (NSStatusItem *)statusItem { return statusItem; } 然后在我的首选项中导入ManagerClass.h 然后在preferences.m中,我尝试执行: ManagerClass *someInstanceToIt = [[ManagerClass alloc] init]; [(NSStatusItem *)[som

我正在尝试从另一个类“我的首选项”类更改NSStatusBar中的标题

在我的ManagerClass.m&h中,我已声明

- (NSStatusItem *)statusItem { return statusItem; }
然后在我的首选项中导入ManagerClass.h

然后在preferences.m中,我尝试执行:

ManagerClass *someInstanceToIt = [[ManagerClass alloc] init]; 
[(NSStatusItem *)[someInstanceToIt statusItem] setTitle:@"New Title"];
但是,如果我使用if进行测试,我可以看到statusItem是空的,那么statusItem似乎永远不会被传递到preferences.m文件


有什么想法吗?我完全卡住了

您在使用
[[ManagerClass alloc]init]
时正在创建一个新实例。您可能想要的是以前创建的对象,而不是新对象

有多种方法可以解决您的问题: -第一个解决方案是将创建的
ManagerClass
实例传递给首选项控制器。但是在这种情况下,您必须不断地将
ManagerClass
实例保存在变量中,这样您就不会丢失它。 -另一种方法是实现单例设计。这意味着您可以选择在整个应用程序中使用一个共享对象。下面是一个例子:

@implementation aClass
- (id)init {
    self = [super init];
    if(self != nil) {
    }
    return self;
}

+ (id)sharedInstance { // note the + for a class method
    static id shared = nil;
    if(shared == nil) {
        shared = [[self alloc] init];
    }
    return shared;
}
@end
现在,您可以调用此代码,以便在每次调用时接收相同的对象:

aClass *sharedObject = [aClass sharedInstance];
希望有帮助,
ief2

首先,
someInstanceToIt
应该是一个实例变量,这样,只要需要状态项,您就可以拥有这个实例

其次,确保实现
-[ManagerClass init]
以创建NSStatusItem并将其存储在ManagerClass实例的
statusItem
实例变量中<代码>状态项包含
nil
,直到发生这种情况

第三,“ManagerClass”不是一个很好的类名称。请注意我如何在上面说“ManagerClass实例”。我建议改为“StatusItemManager”;有了这个更改,我可以说“StatusItemManager的实例变量”