Cocoa 检测何时卸载可移动存储

Cocoa 检测何时卸载可移动存储,cocoa,volume,removable-storage,nsworkspace,diskarbitration,Cocoa,Volume,Removable Storage,Nsworkspace,Diskarbitration,我正在开发一个应用程序,它可以检测当可移动存储被卸载或被强制从USB拔出时发生的事件。我如何接收这些活动 关于顺利卸载设备的第一种可能性,我已经看到了NSWorkspace,但是这个类有类似-unmountAndEjectDeviceAtPath:的方法来卸载设备。有人能给我指出一些检测未安装卷的示例代码吗?在中使用。来自HardwareGlowler的一段代码: NSWorkspace *workspace = [NSWorkspace sharedWorkspace]; NSNotifica

我正在开发一个应用程序,它可以检测当可移动存储被卸载或被强制从USB拔出时发生的事件。我如何接收这些活动


关于顺利卸载设备的第一种可能性,我已经看到了
NSWorkspace
,但是这个类有类似
-unmountAndEjectDeviceAtPath:
的方法来卸载设备。有人能给我指出一些检测未安装卷的示例代码吗?

在中使用。

来自HardwareGlowler的一段代码:

NSWorkspace *workspace = [NSWorkspace sharedWorkspace];
NSNotificationCenter *center = [workspace notificationCenter];

[center addObserver:[VolumeNotifier class] selector:@selector(volumeDidMount:) name:NSWorkspaceDidMountNotification object:nil];
[center addObserver:[VolumeNotifier class] selector:@selector(volumeDidUnmount:) name:NSWorkspaceDidUnmountNotification object:nil];
[center addObserver:[VolumeNotifier class] selector:@selector(volumeWillUnmount:) name:NSWorkspaceWillUnmountNotification object:nil];
然后,您需要实现对通知作出反应的方法

+ (void) volumeDidUnmount:(NSNotification *)aNotification;
{
...
}
对于整个实现,请签出 在源代码包中,转到Extras/HardwareGlowler并在那里签出
VolumeNotifier.h/m

更新:


彼得斯的回答比这个好。如果你遇到这个问题,请考虑使用磁盘仲裁框架。不过,我不会使用这些类方法。总有一天,当其他事情不那么紧迫时,我打算将通知程序更改为实例(在其他清理过程中)。确保它也是一个后台应用程序;)Amit Singh的书《MacOSX内部:系统方法》中也描述了这一点。现在可以在@QuinnTaylor:Documentation链接中找到文档。谢谢@吃豆人:有点。在某些非常常见的情况下,可以卸载卷而不会消失(特别是当卷不是该磁盘上唯一的卷时)。您还需要更改描述;磁盘描述没有装入路径的卷未装入。绝对如此。我想重新表述一下我的评论:使用磁盘仲裁框架可能是正确的方法;与其他解决方案相比,它提供了许多可能性。(至于我自己,我只是使用了DA框架,并提供了一个匹配字典,所以我过滤掉了大多数硬盘-例如,匹配“DADeviceProtocol”=“USB”和“DameDiareaRemovable”=1)