安装磁盘映像时从磁盘仲裁双回调

我有一个问题使用DiskArbitration框架,捕获磁盘映像挂载我注册
DARegisterDiskMountApprovalCallback
。问题是每次安装磁盘映像时,都会调用两次回调。为什么这样,我怎么解决这个问题?     
已邀请:
我最终编写了一些东西来检测第二个装载并忽略它。     
安装磁盘时,您经常会看到整个磁盘的事件,然后是该磁盘上不同分区的事件。你需要区分。
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)
放入事件处理程序并查看所获得的内容非常方便。     
你有没有在你的回调中放置一个断点来看看调用它时的调用堆栈是什么?它可以为您提供有关正在发生的事情的一些提示。     
我使用这些捕获。我不确定这些与你正在做什么有什么区别但他们的工作。
[[[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]];
    

要回复问题请先登录注册