2

我在使用 DiskArbitration 框架来捕获我注册的磁盘映像安装时遇到问题 DARegisterDiskMountApprovalCallback。问题是每次挂载磁盘映像时,都会调用两次回调。为什么会这样,我该如何解决?

4

4 回答 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 回答