13

マウントまたはアンマウントされているボリュームに応答する必要があるOSXアプリケーションがあります。

ボリュームのリストを定期的に取得して変更を確認することで、この問題はすでに解決していますが、もっと良い方法があるかどうかを知りたいです。

4

4 に答える 4

16

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");
}
于 2012-09-13T16:07:13.120 に答える
16

取得した通知センターに登録し、[[NSWorkspace sharedWorkspace] notificationCenter]関心のある通知を処理します。これらは、ボリュームに関連する通知です: NSWorkspaceDidRenameVolumeNotificationNSWorkspaceDidMountNotificationNSWorkspaceWillUnmountNotificationおよびNSWorkspaceDidUnmountNotification

于 2012-09-13T15:36:30.577 に答える
3

SCEventsを知っていますか?監視対象のフォルダーの内容が変更されたときに通知を受け取ることができます ( /Volumes)。これにより、定期的に内容を確認するためにタイマーを使用する必要がなくなります。

于 2012-09-13T15:19:21.033 に答える