我在使用 DiskArbitration 框架来捕获我注册的磁盘映像安装时遇到问题 DARegisterDiskMountApprovalCallback
。问题是每次挂载磁盘映像时,都会调用两次回调。为什么会这样,我该如何解决?
问问题
599 次
4 回答
1
我最终编写了一些代码来检测第二个安装并忽略它。
于 2010-05-27T17:53:17.373 回答
1
安装磁盘时,您经常会看到整个磁盘的事件,然后是该磁盘上不同分区的事件。你需要区分。
static void got_disk(DADiskRef disk, void *context)
{
CFDictionaryRef dict = DADiskCopyDescription(disk);
NSNumber *whole = CFDictionaryGetValue(dict, kDADiskDescriptionMediaWholeKey);
if (![whole boolValue]) {
// Handle your event only with the partition, not the "whole" disk
...
}
}
CFShow(dict)
将 a放入您的事件处理程序并查看您得到什么非常方便。
于 2014-04-17T00:28:01.270 回答
0
我用这些来抓住那个。我不确定这些与您正在做的事情有什么不同,但它们确实有效。
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector:@selector(mediaMounted:) name:NSWorkspaceDidMountNotification object:[NSWorkspace sharedWorkspace]];
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector:@selector(mediaUnmounted:) name:NSWorkspaceWillUnmountNotification object:[NSWorkspace sharedWorkspace]];
于 2010-05-26T16:21:23.213 回答
0
您是否在回调中放置了断点以查看调用时的调用堆栈是什么?它可以为您提供一些关于正在发生的事情的提示。
于 2010-05-26T20:41:29.147 回答