cocoa - 检测可移动存储何时卸载

标签 cocoa volume removable-storage nsworkspace diskarbitration

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

我已经看到 NSWorkspace 是平滑卸载设备的第一种可能性,但此类具有诸如 -unmountAndEjectDeviceAtPath: 之类的方法来卸载设备。有人可以向我指出一些检测未安装卷的示例代码吗?

最佳答案

来自 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];

然后您需要实现对通知使用react的方法

+ (void) volumeDidUnmount:(NSNotification *)aNotification;
{
...
}

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

更新:

彼得斯的回答比这个更好。如果您遇到此问题,请考虑使用磁盘仲裁框架。

关于cocoa - 检测可移动存储何时卸载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1408216/

相关文章:

iphone - ABPerson 中发短信的默认电话号码

iphone - 检测 iPhone 音量按钮向上按下?

delphi - 始终检测可移动设备的最佳方法

c++ - 检测可移动驱动器(例如 USB 闪存驱动器)C/C++

objective-c - Objective-C 中的嵌套数组 (NSMutableArray)

objective-c - 来回切换 NSTextView 的文本存储

iphone - 使用核心数据的默认排序

java - 在Android(使用Java)中,如何设置铃声音量(到指定的数字)?

javascript - 检测其他打开的网站甚至应用程序的数量(可能)?

java - 在 Java 中检测多个连接的设备