Objective c 是否从其他类设置NSStatusBar标题?
我正在尝试从另一个类“我的首选项”类更改NSStatusBar中的标题 在我的ManagerClass.m&h中,我已声明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
- (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的实例变量”