我试图从另一个类(我的首选项类)更改NSStatusBar中的标题。
在我的ManagerClass.m&.h中,我已经声明
- (NSStatusItem *)statusItem { return statusItem; }
然后,在我的preferences.m中导入ManagerClass.h
然后在preferences.m内部尝试执行:
ManagerClass *someInstanceToIt = [[ManagerClass alloc] init];
[(NSStatusItem *)[someInstanceToIt statusItem] setTitle:@"New Title"];
但是,如果我使用if进行测试,可以看到statusItem永远不会传递到preferences.m文件,那么我可以看到statusItem为空。
有任何想法吗?我完全被困住了
最佳答案
使用[[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
关于objective-c - 设置其他类的NSStatusBar标题吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4913632/