問題タブ [nsapplication-delegate]

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 に答える
244 参照

swift - ViewController クラスでアプリを起動したファイルの名前を取得しますか?

ダブルクリックして macOS アプリ (Swift 4.x) を起動するファイルの名前を取得するNSApplicationDelegateメソッドを実装しました。func application(_ sender: NSApplication, openFile filename: String) -> Boolただし、このメソッドが呼び出された後ViewController viewDidLoad()、すべての初期化コードが実行されるようです。初期化コードでファイル名を直接利用できるようviewDidLoad()に、クラスでファイル名を取得する方法はありますか?ViewController

アップデート:

AppDelegateSwift 4.2 のこのリンクからの提案にViewController基づいて、データを から に渡すことができるようになりました。

https://stackoverflow.com/questions/15049924/passing-data-from-app-delegate-to-view-controllerhttps://stackoverflow.com/questions/15049924/passing-data-from-app-delegate-to-ビューコントローラー

したがって、私の質問は、ファイル名を直接取得する方法、ViewDidLoad()または名前を取得して、呼び出されたときapplication(_, sender: NSApplication, openFile filename: String) -> Boolに渡すことができるようにする方法です。ViewControllerViewDidLoad()

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

cocoa - アプリが終了する/ウィンドウが閉じる前に、NSDocument に最後の変更を加えますか?

基本的な NSDocument ベースのアプリがあります。次の場合、ドキュメントに最後の変更を加える必要があります。

  1. ユーザーがドキュメントのウィンドウを閉じる
  2. ユーザーがアプリを終了する

なんで?

ドキュメント ウィンドウには NSTextField が含まれています。通常、このテキスト フィールドに入力されたテキストは、ユーザーが ( 経由でtextDidEndEditing(_:)) Enter キーを押した後、ドキュメントのモデルにコミットされます。

ユーザーがテキストを入力したが、Enter キーを押さなかったとします。代わりに、Cmd-W または Cmd-Q を押して、ドキュメント ウィンドウを閉じるか、アプリを完全に終了します。

textDidEndEditingは呼び出されないので、テキスト フィールドに変更が含まれているかどうかを確認し、自分でドキュメントを更新しようとします。

❌ ここが難しいところです。次の場合、 でデッドロックが発生しNSDocument.performActivityWithSynchonousWaitingます。

にフックするのではなく、 にフックすることで、デッドロックを回避することができviewWillDisappearましたNSDocument.canClose(withDelegate delegate: Any, shouldClose shouldCloseSelector: Selector?, contextInfo: UnsafeMutableRawPointer?)

✅ このコードにより、ユーザーがドキュメント ウィンドウを閉じたときに変更が保存されます。

.

❓残念ながら、上記はユーザーがアプリを終了したときに呼び出されません。--でドキュメントを更新しようとしましたが、うまくいきapplicationWillTerminate()ませんでした。また、終了をオーバーライドapplicationShouldTerminate()して 3 秒間遅らせてみました。ドキュメントのウィンドウが「編集済み」としてマークされているのがわかりますが、変更は保存されません。

アプリが終了する直前に NSDocument に最後の変更を加えて、自動的に保存するにはどうすればよいですか?