Swift

Swift:terminateの問題

水道検針アプリで苦労しています。摩訶不思議な現象に悩まされました。

アプリを終了させるには、windowを閉じるか、アプリを強制終了するか、いずれかの方法になります。アプリを残さない場合、挙動を整理すると次のようになります。

(1) windowを閉じる

  • ① applicationShouldTerminateAfterLastWindowClosed
    (trueを返す)
    →② applicationShouldTerminateAfterLastWindowClosed
    (NSApplicationTerminateReply.terminateNowを返す)
    →③ applicationWillTerminate

(2) アプリを強制終了させる

  • ② applicationShouldTerminateAfterLastWindowClosed
    (NSApplicationTerminateReply.terminateNowを返す)
    →③ applicationWillTerminate

(1)と(2)の違いは、(2)が②から始まることです。

自分のケースでは、iMac / macOS10.12.6では(1)と(2)のいずれも想定通りの結果になりました。しかし、MacBook Air / macOS10.12.6では(1)は正しく動作するのですが、(2)がおかしな動きになり、アプリ終了後、再度アプリを起動すると、アラートが出る問題が発生しました。

解決策

いずれのケースも強制終了になります。それで、挙動を(2)も(1)と同様にすることにしました。.xibのアプリメニューのアプリ強制終了(terminate)のsent Actionsの接続をperformCloseに変更しました。

スクリーンショット 2017-08-05 12.52.49

Categories: Swift, 技術

Tagged as: