マウントまたはアンマウントされているボリュームに応答する必要があるOSXアプリケーションがあります。
ボリュームのリストを定期的に取得して変更を確認することで、この問題はすでに解決していますが、もっと良い方法があるかどうかを知りたいです。
マウントまたはアンマウントされているボリュームに応答する必要があるOSXアプリケーションがあります。
ボリュームのリストを定期的に取得して変更を確認することで、この問題はすでに解決していますが、もっと良い方法があるかどうかを知りたいです。
NSWorkspace
アプローチはまさに私が探していたものです。数行のコードの後で、タイマーを使用するよりもはるかに優れたソリューションがあります。
-(void) monitorVolumes
{
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector: @selector(volumesChanged:) name:NSWorkspaceDidMountNotification object: nil];
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector: @selector(volumesChanged:) name:NSWorkspaceDidUnmountNotification object:nil];
}
-(void) volumesChanged: (NSNotification*) notification
{
NSLog(@"dostuff");
}
取得した通知センターに登録し、[[NSWorkspace sharedWorkspace] notificationCenter]
関心のある通知を処理します。これらは、ボリュームに関連する通知です: NSWorkspaceDidRenameVolumeNotification
、NSWorkspaceDidMountNotification
、NSWorkspaceWillUnmountNotification
およびNSWorkspaceDidUnmountNotification
。
SCEventsを知っていますか?監視対象のフォルダーの内容が変更されたときに通知を受け取ることができます ( /Volumes
)。これにより、定期的に内容を確認するためにタイマーを使用する必要がなくなります。