我正在尝试更改NSStatusBar中另一个类的标题,即我的preferences类。
在我的ManagerClass.m & .h中,我声明了
- (NSStatusItem *)statusItem { return statusItem; }然后将ManagerClass.h导入到我的首选项中。m
然后,我试着执行以下命令:
ManagerClass *someInstanceToIt = [[ManagerClass alloc] init];
[(NSStatusItem *)[someInstanceToIt statusItem] setTitle:@"New Title"];但是,如果我使用if进行测试,可以看到statusItem是空的,那么statusItem似乎永远不会被传递给首选项.m文件。
有什么想法吗?我完全卡住了
发布于 2011-02-06 22:10:28
在使用[[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
发布于 2011-02-07 04:12:17
首先,someInstanceToIt应该是一个实例变量,这样只要需要状态项,您就可以拥有这个实例。
其次,确保实现-[ManagerClass init]来创建NSStatusItem,并将其存储在ManagerClass实例的statusItem实例变量中。在此之前,statusItem包含nil。
第三,“ManagerClass”对于类来说不是一个很好的名字。注意我是如何在上面说“ManagerClass实例”的。我建议使用“StatusItemManager”;通过这种更改,我可以说“StatusItemManager的实例变量”。
https://stackoverflow.com/questions/4913632
复制相似问题