Двойной обратный вызов от арбитража диска при монтаже образа диска

StackOverflow https://stackoverflow.com/questions/2914354

Вопрос

У меня есть проблема с использованием дискарбитационной структуры, чтобы уловить монтаж образа диска 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]];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top