我试图从另一个类(我的首选项类)更改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/

10-10 20:37