安装磁盘映像时磁盘仲裁的双重回调
-
04-10-2019 - |
题
我使用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]];
不隶属于 StackOverflow