将NSString用于statusItem

时间:2012-10-06 10:47:37

标签: objective-c cocoa title menuitem

我想给我的statusItem一个标题,它应该改变它的内容。但如果我声明一个变量,菜单栏中就没有任何内容。 我的字符串在.h:

@interface AppDelegate : NSObject <NSApplicationDelegate> { 

NSString *myString;

}

正常的文本翻转工作:@"text"但是当我这样做时.m:

-(void)awakeFromNib {
statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain];

[statusItem setTitle:myString];

[statusItem setMenu:statusMenu];
[statusItem setToolTip:@"my Tooltip"];
[statusItem setHighlightMode:YES];

}

当然我给了字符串一些内容。 提前致谢

1 个答案:

答案 0 :(得分:0)

问题是awakeFromNib在初始化myString之前被调用。这就是你的字符串文字有效但用变量初始化的原因。

您可以尝试这样做,因为在您的评论中,您提到从课堂外设置标题。

(1)将您的ivar NSString *myString更改为声明的属性:@property (nonatomic, strong) NSString *myString;

(2)为您的状态项创建一个ivar:NSStatusItem *_statusItem;并在awakeFromNib中初始化,但要对此ivar进行初始化。

(3)为myString

创建自定义设置器
- (void)setMyString:(NSString *)aString {
   _myString = aString;
   [_statusItem setTitle:aString];
}

如果您不需要myString其他任何内容,您可以省去它,只需实现一个公共方法来设置NSStatusItem标题。注意:创建该状态项可能需要一些UI指标的占位符文本。不确定。