我使用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]];
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top