在我的一个课程中,我设置了我的NSStatusBar,如:
statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain];
[statusItem setMenu:statusMenu];
是否有可能以某种方式调用类似的东西:
[statusItem setTitle:@"Waiting for data..."];
来自另一个班级?我想更改标题,因为用户已将信息输入到由不同类处理的首选项窗口中。
我尝试创建一个类函数:
+(void)ChangeTitel
我从首选项类调用它,它似乎能够调用它,但不知何故不能访问statusItem对象。
有什么想法吗? :)
答案 0 :(得分:1)
如果要从其他类更改标题,则其他类需要引用该状态项。
所以你需要做的是编写一个方法来返回这个状态项的指针,(它的实例变量是对吗?)然后调用该方法,以获取另一个类中的NSStatusItem对象。
从你的问题来看,我认为你是OOP编码的新手。类是一组代码.. sorta,如果你[[类alloc] init]你为类分配一些内存,并在其中创建该类的新对象。一个新的实例。 如果你调用以 - 开头的东西 - 那么你正在调用一个实例方法,这需要你有一个实例。如果你用+调用某些东西,你正在调用一个没有实例的CLASS方法,所以无法访问你状态项的实例变量。
- (NSStatusItem *)statusItem
{ return statusItem; }
不要忘记在头文件中声明此方法,否则您将收到编译器警告。
应该在管理状态项的类中。 然后在您要使用状态项的类中:
#import "ManagerClass.h" // on top, so we have the method declared
然后:
ManagerClass *someInstanceToIt = [[ManagerClass alloc] init];
[(NSStatusItem *)[someInstanceToIt statusItem] setTitle:@"New Title"];
如果管理器类的实例是接口构建器插座,或者之前已经创建过,那么你不应该使用alloc] init]
执行第一行如果您需要更多帮助,请发表评论。