可以轻松设置NSStatusItem的标题和长度.是否可以完全更改NSStatusItem的外观,并将其替换为自定义视图?
例如,如果我希望我的NSStatusItem是由边框包围的整行图标,而不仅仅是一个图标,并且可以单独单击每个图标.这可能吗?
这样做的标准,最可靠的方法是什么?当我们点击我的网站上的"下载"时,我需要重定向用户下载Mac版本或我的软件的Windows版本.
当用户的鼠标悬停在我的NSStatusItem上时,如何执行函数?
我需要将布尔值转换为对象,否则NSKeyedArchiver会抛出内存访问错误.最好的方法是什么?
好的,这个问题变得越来越复杂,所以我要把它完全划掉并重新开始.我设法创建了一个非常基本的Cocoa应用程序来演示我的问题.
所以这就是问题所在:
在线程内部,我在应用程序的状态栏菜单中设置菜单项的标题.当应用程序尝试更改菜单项的标题时,我打开了菜单,大部分时间它都可以工作,但有时会崩溃应用程序.
以下是示例应用的完整代码:
MenubarFailAppDelegate.h
#import <Cocoa/Cocoa.h>
@interface MenubarFailAppDelegate : NSObject <NSApplicationDelegate> {
IBOutlet NSMenu *statusMenu;
NSStatusItem *statusItem;
IBOutlet NSMenuItem *menuItem;
int currentDelay;
}
@end
Run Code Online (Sandbox Code Playgroud)
MenubarFailAppDelegate.m
#import "MenubarFailAppDelegate.h"
@implementation MenubarFailAppDelegate
- (id)init {
self = [super init];
if (self != nil)
{
currentDelay = 0;
}
return self;
}
- (void)awakeFromNib {
// Create status menu item
statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain];
[statusItem setMenu:statusMenu];
[statusItem setTitle:@"Fail"];
[statusItem setHighlightMode:YES];
currentDelay = 3;
[NSThread detachNewThreadSelector:@selector(changeStatusItemTitleLoopThread)
toTarget:self
withObject:nil];
}
- (void)changeStatusItemTitleLoopThread …Run Code Online (Sandbox Code Playgroud) 我有一个嵌入在NSStatusItem中的WebView,我想在用户右键单击WebView/NSStatusItem时显示我在Interface Builder中构建的NSMenu.最简单的方法是什么?
我的程序中有一个非常大的循环,我使用了很多临时变量和实例变量.当我的循环继续运行时,程序会占用越来越多的内存,直到崩溃为止.在这种情况下,我可以就如何正确的内存管理获得一些建议吗?我的主要问题是,为什么以下代码有误?
以下是导致泄漏的代码:
(void)processTrackValues:(NSMutableArray*)tags {
NSImage*trackArt = [tags objectAtIndex:5];
NSMutableArray*tempArtArray = [[NSMutableArray alloc] init];
[tempArtArray addObject:trackArt];
[tempArtArray发布];
}
我也尝试过:
(void)processTrackValues:(NSMutableArray*)tags {
NSImage*trackArt = [tags objectAtIndex:5];
NSMutableArray*tempArtArray = [[NSMutableArray alloc] init];
[tempArtArray addObject:trackArt];
[trackArt发布];
[tempArtArray发布];
}