1

Mac OS X用のステータスバー専用アプリケーションを作成しました。http://d.pr/i/Coviのようなものです。このチュートリアルhttp://cocoatutorial.grapewave.com/2010/01/creating-a-status-bar-application/で作成しました。ここで質問があります。[バージョン情報]メニュー項目をクリックしてウィンドウを表示するにはどうすればよいですか?私はそれを試しています:

#import "IGAppDelegate.h"
#import "IGAboutWindowController.h"

@implementation IGAppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
}

- (void)awakeFromNib {
    _statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
    [_statusItem setMenu:_menu];
    [_statusItem setTitle:@"LeoHelper"];
    [_statusItem setHighlightMode:YES];
}

#pragma mark - Actions



- (IBAction)quit:(id)sender {
    [NSApp terminate:self];
}

- (IBAction)about:(id)sender {
    IGAboutWindowController *aboutController = [[IGAboutWindowController alloc] init];
    [aboutController showWindow:self];
}
@end
4

1 に答える 1

2

自動参照カウント(ARC)を使用していると推測します。もしそうなら、これがabout:メソッドで何が起こるかです:

最初にのローカルインスタンスを作成しIGAboutWindowController、次にそのウィンドウを表示するように指示します。これにより、画面にウィンドウが表示されますが、プロジェクトでARCを使用している場合、ウィンドウはすぐに消えます。その理由は、about:メソッドが終了するとすぐに、のローカルインスタンスのIGAboutWindowController割り当てが自動的に解除され、その結果、そのウィンドウが画面から削除されるためです。

このabout:メソッドをARC管理プロジェクトに正常に実装するには、次のようにクラスaboutControllerのインスタンス変数としてを定義する必要があります。IGAppDelegate

@class IGAboutWindowController;

@interface IGAppDelegate : NSObject <...>

@property (nonatomic, strong) IGAboutWindowController *aboutController;

@end

about:次に、次のようにメソッドを実装します。

- (IBAction)about:(id)sender {
    if (self.aboutController == nil)
       self.aboutController = [[IGAboutWindowController alloc] init];
    [aboutController showWindow:self];
}
于 2013-01-17T22:51:36.727 に答える