問題タブ [nsapplication]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1453 参照

cocoa - ユーザー エージェント プロセスが終了したときにコードを実行するにはどうすればよいですか?

私が欲しいもの

終了時にヘルパー アプリ ユーザー エージェント (Info.plist の LSUIElement が True) をログイン項目に追加する必要があります。

問題

ヘルパー アプリ プロセスが終了する前に実行するコードを取得できません。私の「ログイン項目に追加」コードは正常に動作します。

バックグラウンド

  • 常に実行されるヘルパー アプリ ユーザー エージェント プロセスがあります。
  • 最初の起動時に、ログイン項目に自分自身を追加します
  • アプリが移動された場合、次回のログイン時に、ヘルパー アプリ プロセスが見つからないため、起動されません。

私が試したこと

NSApplication をサブクラス化し、terminate: または stop: をオーバーライドしてそこにコードを配置する必要があるのだろうかと思いますが、それはやり過ぎのようです。確かにもっと良い方法がありますか?

NSAppデリゲートでこれらすべてのさまざまなことを試しました:

NSApplication デリゲート メソッドがユーザー エージェント プロセスで機能しないのはなぜですか?

また、終了時にログイン項目をチェックするプロセスを取得するにはどうすればよいですか?

どんな助けにもとても感謝しています。ありがとう!

更新 1 2011 年 6 月 2 日

さらに掘り下げた後、問題はプロセスが実際に終了しないことであり、OSによって強制終了されることがより一般的です。

これは、Activity Monitor でプロセスを「終了」することを選択した場合、またはコンピューターをシャットダウンした場合に、デリゲート メソッドの終了が呼び出されないことを意味します。

次の Applescript が実行されると、デリゲート メソッドが呼び出されます。

0 投票する
1 に答える
449 参照

objective-c - NSApplicationデリゲートの質問

- (void)applicationWillTerminate:(NSNotification *)notificationシステムがシャットダウンし、アプリケーションが終了するように指示されたときに、まだ呼び出されるかどうか疑問に思いました。

終了時にいくつかのアクションを実行する必要があるエージェントに取り組んでいますが、デリゲートが呼び出されたかどうかはわかりません。

ありがとう!

0 投票する
1 に答える
147 参照

macos - osxとobjc-プラグインの2番目の実行ループを実行していますか?

ここにCプログラマー。実行中のOSXアプリへのプラグインを作成して、独自のウィンドウを開き、ボタンの押下を受け入れ、ウィンドウを閉じてプラグインに戻ります。アプリを終了しないでください。

NSAppを使用してウィンドウを開くことができ、ボタンもありますが、何も実行されません。

私がそれを設定した方法です。通常、[button setTarget:self]ですが、これは通常のc関数​​内にあり、「self」はありません。それが私が解決する必要がある問題であるならば、私はcからobjcメソッドを呼び出す方法を知りません。ボタンが押されたときにメソッドfauxActionが呼び出されるようにしたいだけです。

これはプラグインのウィンドウであり、メインアプリケーションではありません。ワイヤーを交差させることはできません。[NSApp run]とその上に終了メニューを置くと、メインアプリケーションが終了します。これは、実行ループが実行中のスレッドをラップしているためだと思います。

どんな助けでもいただければ幸いです。ここで溺れているような気がします。

0 投票する
1 に答える
884 参照

macos - Mac アプリは、起動に使用された方法をどのように判断できますか?

プロトコル ハンドラでもある Mac OS X アプリケーションがあります (たとえば、Safari が HTTP および HTTPS プロトコルのプロトコル ハンドラであるように)。したがって、ユーザーが任意のアプリケーションで myscheme://some-kind-of-info という形式のリンクをクリックすると、アプリケーションが起動してリンクを処理します。

ここで、アプリケーションがそのようなリンク クリックによって起動されたのか、それとも他の方法で起動されたのかを判断できるようにする必要があります。つまり、リンククリック以外の方法で起動されたということです。(そのような場合、アプリを開いたままにしておきたいのですが、リンクによって起動された場合は終了してリンクを無視する必要があります。この方法では、既に実行されている場合にのみ動作します。)

起動時にアプリ内で調べて、AppleScript GetURL イベントではなく標準メソッドによって起動されたことを確認する方法はありますか? たとえば、アプリが 0.5 秒間実行された後にのみこれらのリンクを開くようにするのではなく、文書化された方法で調べたいと思います。

0 投票する
2 に答える
737 参照

objective-c - Objective-Cでウィンドウを初期化するにはどうすればよいですか?

Macグラフィックアプリケーション(iPhoneではない)の場合、Javaのmainメソッドのようなものが必要です。これは、プログラムを実行する最初のメソッドです。私はNSViewControllerやNSWindowオブジェクトのようなものを見てきました。私は周りを見回しましたが、この一見簡単な質問に対する答えはどこにも見つかりません。(ちなみに私はこれで非常に新しいです)

ありがとう

0 投票する
2 に答える
2610 参照

cocoa - 最後のウィンドウが閉じた後、アプリケーションを終了します

最後のメインウィンドウが閉じたときにアプリケーションを閉じたい。applicationShouldTerminateAfterLastWindowClosed:次の理由で使用できません
。1。メインウィンドウを表示する前に1つの確認ウィンドウが表示され、このウィンドウを閉じてもアプリケーションを終了しないでください。
2.ヘルプウィンドウが開いている場合でも、メインウィンドウを閉じた後、アプリケーションを終了する必要があります。

0 投票する
1 に答える
229 参照

objective-c - 「Hide Others」への対応 Mac OS X

NSWorkspaceDidHideApplicationNotification実行中のアプリケーションでユーザーが「Hide Others」を選択した場合と同様の通知またはコールバックを探しています。誰かがAPIを知っているか、アプリケーションで「Hide Others」アクションを検出するためのアドバイスがあるかどうか疑問に思っていました.

0 投票する
2 に答える
2732 参照

cocoa - ココアでNSApplicationを作成しますか?

かなり前から探していましたが、何も見つからず、作成できるウィンドウが既にありますが、makeKeyAndOrderFrontを呼び出そうとすると、呼び出すアプリケーションがなかったので、誰かがアプリケーションを作成する方法について簡単な例を挙げられるかどうか疑問に思いますか?NSApplicationであり、setDelegateなどが必要であることがわかりましたが、正確に何が必要かわかりません。たとえば、ウィンドウを作成するには、次のコードが必要です。

だから誰でも私に関連するコードを与えることができますが、NSApplicationの場合、私はすでにボタンとウィンドウを持っていますか?

0 投票する
2 に答える
338 参照

python - PYObjC NSWindow は NoneType ですか?

ウィンドウは別のセクションで作成され、問題ないように見えますが、次のようになります。

: 'NoneType' オブジェクトには属性 'contentView' がありません

ウィンドウが「NoneType」であると考える理由を知っている人はいますか? ありがとうございました。

0 投票する
1 に答える
6741 参照

c++ - Cocoa:NSApplicationを既存のc++メインループに統合します

私はOSXでCocoaを既存のc/c ++メインループと一緒に使用しようとした最初の人ではないことを知っていますが、これまでに出会ったソリューションはあまり好きではないので、別のアイデアを思いつきました。 d話し合いたい。私が見つけた最も一般的な方法(glut、glfw、SDL、そしてQTでも)は、ポーリングを使用してNSApplications runメソッドを置き換え、イベントを自分で処理することです。

これには、新しいイベントがあるかどうかを確認するために常にポーリングする必要があるため、CPUが実際にアイドル状態になることはないという大きな欠点があります。さらに、NSApplications run関数内で行われているのはそれだけではないため、この代替品を使用してください。

だから私がやりたいのは、カカオのrunLoopを無傷に保つことです。独自のタイマーメソッドがc++で実装されていると想像してください。これらのメソッドは通常、メインループ内で管理および起動されます(これは例としてのほんの一部です)。私の考えは、すべてのループ部分をセカンダリスレッドに移動し(NSApplicationの実行は、私の知る限りメインスレッドから呼び出す必要があるため)、カスタムイベントを派生バージョンのNSApplicationに投稿して、その中で適切に処理することです。 sendEvent:メソッド。たとえば、タイマーがc ++ループの発火で測定された場合、NSApplicationにカスタムイベントを送信します。NSApplicationは、アプリケーションのloopFunc()関数(メインスレッドにも存在します)を実行し、c++イベントチェーンにイベントを適切に送信します。 。それで、まず第一に、これは良い解決策になると思いますか?そうであれば、

otherEventWithType:location:modifierFlags:timestamp:windowNumber:context:subtype:data1:data2:

次に、次のようなものを使用します。

NSApplicationに通知します。

(otherEventWithTypeで)ウィンドウに関する情報なしでイベントを投稿したいのですが、その部分を単に無視できますか?

次に、次のようなNSApplicationssendEvent関数を上書きすることを想像します。

長い投稿で申し訳ありませんが、これまでのところこのテーマについて私が見つけたものに本当に満足していないので、これは私をかなり悩ませてきました。これは、NSApplication内のカスタムイベントを投稿して確認する方法ですか。これは、ポーリングせずにココアを既存の実行ループに統合するための有効なアプローチだと思いますか?