objective-c – NSStatusItem在启动时短暂出现,但会立即消失

objective-c – NSStatusItem在启动时短暂出现,但会立即消失,第1张

概述在几个月内没有任何工作后,我开始回到可可发展.最初当我开始使用Snow Leopard和 Xcode 3.我现在正在使用 Xcode 4.2运行Lion,而且我遇到了一些我以前没有遇到过的问题. 我相信这可能是我以前从未使用ARC的事实,所以我确定我错过了一些事情. 我正在尝试创建状态栏应用程序,没有主窗口或停靠图标.当我运行应用程序时,我的应用程序的状态栏图标会短暂显示约一秒钟,但会消失. 我的 在几个月内没有任何工作后,我开始回到可可发展.最初当我开始使用SNow Leopard和 Xcode 3.我现在正在使用 Xcode 4.2运行lion,而且我遇到了一些我以前没有遇到过的问题.

我相信这可能是我以前从未使用ARC的事实,所以我确定我错过了一些事情.

我正在尝试创建状态栏应用程序,没有主窗口或停靠图标.当我运行应用程序时,我的应用程序的状态栏图标会短暂显示约一秒钟,但会消失.

我的代码

QuickPlusAppDelegate.h

#import <Cocoa/Cocoa.h>@interface QuickPlusAppDelegate : NSObject <NSApplicationDelegate>@property (assign) IBOutlet NSWindow *window;@property (assign) NsstatusItem *statusItem;@property (weak) IBOutlet NSMenu *statusItemmenu;@property (strong) NSImage *statusItemIcon;@property (strong) NSImage *statusItemIconHighlighted;@property (strong) NSImage *statusItemIconNewNotification;@end

QuickPlusAppDelegate.m

#import "QuickPlusAppDelegate.h"@implementation QuickPlusAppDelegate@synthesize statusItemmenu = _statusItemmenu;@synthesize window = _window,statusItem = _statusItem;@synthesize statusItemIcon = _statusItemIcon,statusItemIconHighlighted = _statusItemIconHighlighted,statusItemIconNewNotification = _statusItemIconNewNotification;- (voID) awakeFromNib{    NSBundle *appBundle = [NSBundle mainBundle];    _statusItemIcon = [[NSImage alloc] initWithContentsOffile:[appBundle pathForResource:@"statusItemIcon" ofType:@"png"]];    _statusItemIconHighlighted = [[NSImage alloc] initWithContentsOffile:[appBundle pathForResource:@"statusItemIconHighlighted" ofType:@"png"]];    _statusItemIconNewNotification = [[NSImage alloc] initWithContentsOffile:[appBundle pathForResource:@"statusItemIconNewNotification" ofType:@"png"]];    _statusItem = [[Nsstatusbar systemStatusbar] statusItemWithLength:NSVariableStatusItemLength];    [_statusItem setimage:_statusItemIcon];    [_statusItem setAlternateImage:_statusItemIconHighlighted];    [_statusItem setHighlightmode:YES];}- (voID)applicationDIDFinishLaunching:(NSNotification *)aNotification{    // empty}@end

编辑如果看到我的代码有问题,请让我知道.我肯定会有一些批评,所以我可以变得更好.

另一个编辑当主窗口本身加载时,状态栏图标似乎消失.

解决方法 在这种情况下,_statusItem将被自动释放.
_statusItem = [[Nsstatusbar systemStatusbar] statusItemWithLength:NSVariableStatusItemLength];

这返回一个自动释放的对象. _statusItem只是一个iVar.不仅如此,您将该属性声明为assign:

@property (assign) NsstatusItem *statusItem;

你可能想在这里做的是使属性强,然后,而不是直接设置ivar,使用属性来设置它.所以这样:

@property (strong) NsstatusItem *statusItem;

接着:

self.statusItem = [[Nsstatusbar systemStatusbar] statusItemWithLength:NSVariableStatusItemLength];

这将导致statusItem被保留.我敢打赌,现在发生的情况是,当自动释放池d出时,它会被释放,然后在下次尝试访问它的应用程序崩溃时,导致它从菜单栏中消失.通过僵尸仪器运行它会告诉你,如果这是发生了什么事情.但是一般来说,你的应用程序需要有一个强有力的参考,以便它坚持下去.

总结

以上是内存溢出为你收集整理的objective-c – NSStatusItem在启动时短暂出现,但会立即消失全部内容,希望文章能够帮你解决objective-c – NSStatusItem在启动时短暂出现,但会立即消失所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1251282.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存