检测卸载可移动存储的时间

Kin*_*ing 4 cocoa volume removable-drive diskarbitration nsworkspace

我正在开发一个应用程序,它可以检测卸载存储器或从USB强行拔出可移动存储器时发生的事件.我怎样才能收到这些活动?

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

sti*_*igi 10

来自HardwareGrowler的一些代码:

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];
Run Code Online (Sandbox Code Playgroud)

然后,您需要实现方法以对通知ala做出反应

+ (void) volumeDidUnmount:(NSNotification *)aNotification;
{
...
}
Run Code Online (Sandbox Code Playgroud)

对于整个实现,请查看http://growl.info/source.php 在Source包中转到Extras/HardwareGrowler并在那里查看VolumeNotifier.h/m

更新:

彼得斯的答案优于此.如果您遇到此问题,请考虑使用磁盘仲裁框架.