2016-11-18 11 views
2

現在、ユーザのデフォルトに変更を加えた後にFinderを再起動する必要があるユーティリティプログラムを開発中です。Finderを安全に終了できるかどうかを判断する

安全のために、killall FinderNSTask経由)に電話する前にFinderがビジーであるかどうか確認したいと思います。ファインダーがファイルをコピーしている場合やそれ以外の場合は、私はそのアクションを防止して少し待っています。

MacOS 10.10以降のSwift 2.3では、Finderがビジー状態になっているか、安全に削除できるかどうかを判断する方法はありますか?

これができない場合は、Finderをリフレッシュ(再起動)するより安全な方法がありますか?

ありがとうございます!

+0

はあなたが強制的にそれを殺すのではなく、でもやめ送信してよろしいです:私のコントローラはdeinitはialized、セレクタれ、この観察者は、このようになります。アクティブなものが続いていますか? – dfri

+0

私はそれが実際に可能であるかどうかはわかりませんでした。これにAppleScriptを使うべきですか?答えとして例を掲示できますか?それは私を助けるだろう – beeb

+1

あなたが(obj-C、ココア)を助けることができる場合[この回答](http://stackoverflow.com/a/10226948/4573247)参照してください。代わりに、AppleScriptを使用して、[この回答](http://stackoverflow.com/a/1462686/4573247)があなたを助けることができるかどうかを確認してください(obj-C、AppleScript)。 – dfri

答えて

0

@dfriのコメントのおかげで、私は(これはリンクされた答えに示されたものではありませんが)これを行う方法を見つけ出すことができました。ファインダー用NSRunningApplicationオブジェクトを観察すると、(オブジェクトが原因私はオブザーバーを削除することができる前に終了にialized deinitた)ことはできませんでしたので

は、私がNSWorkspace.sharedWorkspace().notificationCenter

NSWorkspace.sharedWorkspace().notificationCenter.addObserver(self, selector: #selector(MyController.applicationWasTerminated(_:)), name: NSWorkspaceDidTerminateApplicationNotification, object: nil) 

からNSWorkspaceDidTerminateApplicationNotificationを観察することになった私はその後削除することができます

func applicationWasTerminated(notification: NSNotification?) { 
    guard let notif = notification else { return } 
    guard let userInfo = notif.userInfo as? [String : AnyObject] else { return } 
    guard let identifier = userInfo["NSApplicationBundleIdentifier"] as? String else { return } 
    if identifier == "com.apple.finder" { 
     NSWorkspace.sharedWorkspace().launchAppWithBundleIdentifier("com.apple.finder", options: NSWorkspaceLaunchOptions.Default, additionalEventParamDescriptor: nil, launchIdentifier: nil) 
    } 
} 
関連する問題