Двойной обратный вызов от арбитража диска при монтаже образа диска
-
04-10-2019 - |
Вопрос
У меня есть проблема с использованием дискарбитационной структуры, чтобы уловить монтаж образа диска I зарегистрироваться для DARegisterDiskMountApprovalCallback
. Отказ Проблема в том, что каждый раз, когда изображение диска установлено, обратный вызов называется дважды. Почему это и как я могу это решить?
Решение
Я закончил кодировать что-то, чтобы обнаружить 2-е гору и игнорировать его.
Другие советы
Когда диск установлен, вы часто видите событие для всего диска, а затем события для отдельных разделов на этом диске. Вам нужно будет отличить.
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]];