Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 检测何时在OS X上装入卷_Objective C_Macos_Cocoa_Volumes - Fatal编程技术网

Objective c 检测何时在OS X上装入卷

Objective c 检测何时在OS X上装入卷,objective-c,macos,cocoa,volumes,Objective C,Macos,Cocoa,Volumes,我有一个OSX应用程序,它需要响应正在装载或卸载的卷 我已经通过定期检索卷列表并检查更改来解决此问题,但我想知道是否有更好的方法。您知道吗?它允许您在观察到的文件夹内容发生更改时收到通知(/Volumes)。这样,您就不必使用计时器定期检查内容。注册到您从[[NSWorkspace sharedWorkspace]notificationCenter]获得的通知中心,然后处理您感兴趣的通知。这些是与卷相关的方法:nsworkspacedidnameVolumeNotification,NSWor

我有一个OSX应用程序,它需要响应正在装载或卸载的卷


我已经通过定期检索卷列表并检查更改来解决此问题,但我想知道是否有更好的方法。

您知道吗?它允许您在观察到的文件夹内容发生更改时收到通知(
/Volumes
)。这样,您就不必使用计时器定期检查内容。

注册到您从
[[NSWorkspace sharedWorkspace]notificationCenter]
获得的通知中心,然后处理您感兴趣的通知。这些是与卷相关的方法:
nsworkspacedidnameVolumeNotification
NSWorkspaceDidMountNotification
NSWorkspaceWillUnmountNotification
nsworkspacediUnmountNotification

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");
}
Swift 4版本:

在ApplicationIDFinishLaunching中声明NSWorkspace,并添加装载和卸载事件的观察者

let workspace = NSWorkspace.shared

workspace.notificationCenter.addObserver(self, selector: #selector(didMount(_:)), name: NSWorkspace.didMountNotification, object: nil)
workspace.notificationCenter.addObserver(self, selector: #selector(didUnMount(_:)), name: NSWorkspace.didUnmountNotification, object: nil)
在以下位置捕获装载和卸载事件:

@objc func didMount(_ notification: NSNotification)  {
    if let devicePath = notification.userInfo!["NSDevicePath"] as? String {
        print(devicePath)
    }
}
@objc func didUnMount(_ notification: NSNotification)  {
    if let devicePath = notification.userInfo!["NSDevicePath"] as? String {
        print(devicePath)
    }
}
它将打印设备路径,例如/Volumes/EOS\u DIGITAL 以下是可以从userInfo读取的常量

NSDevicePath, 
NSWorkspaceVolumeLocalizedNameKey
NSWorkspaceVolumeURLKey

是否有理由在NSWorkspace上使用此功能,如下所述?这是一个第三方库,因此,为了说服我向项目添加额外的依赖项,好处必须非常显著。