我试图改变我的NSStatusBar中的标题来自不同的类,我的偏好类。
在我的ManagerClass.m&我已宣布
- (NSStatusItem *)statusItem { return statusItem; }
然后我在我的preferences.m
中导入了我的ManagerClass.h然后在preferences.m里面我尝试执行:
ManagerClass *someInstanceToIt = [[ManagerClass alloc] init];
[(NSStatusItem *)[someInstanceToIt statusItem] setTitle:@"New Title"];
但似乎statusItem永远不会传递给preferences.m文件,如果我使用if进行测试,我可以看到statusItem为空。
有什么想法吗?我完全被卡住了
答案 0 :(得分:1)
使用[[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
答案 1 :(得分:0)
首先,someInstanceToIt
应该是一个实例变量,因此只要您需要状态项,就可以拥有此实例。
其次,确保实现-[ManagerClass init]
以创建NSStatusItem并将其存储在ManagerClass实例的statusItem
实例变量中。 <{1}}包含statusItem
,直到发生这种情况。
第三,“ManagerClass”对于一个类来说不是一个很好的名字。注意我不得不说上面的“ManagerClass实例”。我建议使用“StatusItemManager”;有了这个改变,我可以说“StatusItemManager的实例变量”。