2

Xcode 4.6.2 を使用した単純な cocoa coredata ステータスバー アプリケーションがあります。これは状況です:

に名前を変更MainMenu.xibPreferencesWindow.xib、メインメニューを削除し、ウィンドウ内の配列コントローラーとバインディングを使用して、シンプルで機能するコアデータ関数を作成しました。新しいファイル -> ユーザー インターフェイス -> メイン メニューを作成し、名前を付けましたStatusBarMenu.xib。シンプルなメニューを追加し、メイン メニューを削除しました。新しい file->objective-c class->subclass を作成NSObjectし、名前を付けましたStatusBarController。インターフェイスのコードは次のとおりです。

@property IBOutlet NSMenu *statusMenu;
@property NSStatusItem *statusItem;
@property [some items for statusbar image]

実装:

@synthesize [everything]
-(void)awakeFromNib{
    statusItem = [[NSStatusBar systemStatusBar]statusItemWithLength:NSVariableStatusItemLength];
    [some string, path and stuff for the images]
    statusItem.menu = statusMenu;
    statusItem.toolTip = @"";
    statusItem.highlightMode = YES;
}

次に、別の新しいファイルを作成しました->objective-c クラス->NSWindowController のサブクラス、PreferencesWindowController という名前を付けて、そのままにしておきます。次に、PreferencesAppController という名前の新しいファイル -> objective-c クラス -> NSObjects のサブクラス。.h のコードは次のとおりです。

@property (assign) IBOutlet NSWindow *mainWindow;
@property (retain) PreferencesWindowController *prefController;
-(IBAction)showPreferences:(id)sender;

.m コード:

@synthesize [everything];
-(IBAction)showPreferences:(id)sender{
    if(!self.prefController)
        self.prefController = [[PreferencesWindowController alloc] initWithWindowNibName:@"PreferencesWindow"];

    [self.prefController showWindow:sender];
}

ファイルにはAppDelegateコアデータのコードのみがあり、何も追加されていません。次に、いくつかのバインディングPreferencesWindow.xibを追加しましたNSObject(青い立方体) PreferencesAppController: Outlets-> mainWindow は、単純な coredata 関数を使用してウィンドウにバインドされています。AppDelegate同じウィンドウにバインドされたウィンドウ アウトレットを持ち、参照アウトレット -> ファイルの所有者デリゲート、いくつかsaveactionmanagedobjectcontext. StatusBarMenu.xibオブジェクトを作成してメニューにStatusBarControllerバインドしました ( ) で、メニュー項目にバインドされたReceived でoutlets->statusMenu呼び出される別の青いオブジェクトを作成しました。PreferencesAppControllerActions->showPreferences

次に、プログラムを実行すると、すべてがうまくいきます。アイコンがステータスバーに表示され、ドロップダウンメニューが機能し、「設定...」をクリックすると設定ウィンドウが表示されますが...フォーカスされていません! 他のウィンドウの上にありますが、クリックしてフォーカスを合わせる必要があります。コアデータの保存機能は、ボタンで手動で保存する必要があることを除いて正常に機能します。ステータスバー メニューからアプリケーションを終了しても保存されませんが、これはわずかな問題です。

ウィンドウがフォーカスされていないのはなぜですか?

4

1 に答える 1