0

私はいくつかの obj-c を学んでいるので、小さなココア アプリケーションを構築しています。

MainMenu.xib から、上部の「メイン メニュー」にメニューを追加しました。クリックすると、ウィンドウのインスタンス (この場合はカテゴリを管理するためのウィンドウ) を開く IBAction がトリガーされます。

このカテゴリ ウィンドウには NSWindowController があり、次のようになります。

//  CategoriesWindow.h
#import <Cocoa/Cocoa.h>
@interface CategoriesWindow : NSWindowController
-(IBAction)OpenCategoriesWindow:(id)sender;
@end

//  CategoriesWindow.m
#import "CategoriesWindow.h"

@implementation CategoriesWindow

-(IBAction)OpenCategoriesWindow:(id)sender
{
    CategoriesWindow *Categories = [[CategoriesWindow alloc] initWithWindowNibName:@"CategoriesWindow"];
    [Categories showWindow:self];
}
@end

これには、いくつかのことを行う NSTableView を備えた CategoriesWindow.xib があるため、このテーブルのデータを処理する CategoryTableController.h と .m があります。ボタンを押すと、たくさんのことをしたいのですが、ウィンドウを閉じてください。つまり、CategoryTableController.m の IBAction からこのウィンドウを閉じたいのです。

どうすればいいですか?このセットアップの 1 つの悪い点 (どこかのチュートリアルから従ったものです...) は、メニュー ボタンをクリックすることで、このウィンドウの多くのインスタンスを開くことができることです。

どこから始めるべきかヒントやアイデアはありますか?

4

1 に答える 1

0

そこから参照

[Categories close];

ただし、クラスのインスタンス メソッドからクラスのインスタンスを作成しているため、実装に問題があります。それは私には正しくありません。また、新しいインスタンスをどこにも保持していないため、ARC で破棄されるか、MRR でリークされる可能性があります。

あなたが望むかもしれないと思います:

-(IBAction)OpenCategoriesWindow:(id)sender
{
    [self showWindow:sender];
}

-(IBAction)CloseCategoriesWindow:(id)sender
{
    [self close];
}

確かではありませんが。

于 2012-12-05T16:29:28.470 に答える