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

时间:2010-05-26 15:26:03

标签: macos callback diskimage diskarbitration

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

4 个答案:

答案 0 :(得分:1)

我最终编写了一些东西以检测第二个装载并忽略它。

答案 1 :(得分: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)并查看您获得的内容非常方便。

答案 2 :(得分: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]];

答案 3 :(得分:0)

你是否在回调中放置了一个断点来查看调用它时的调用堆栈是什么?它可以为您提供有关正在发生的事情的一些提示。