Pregunta

Tengo un problema con marco DiskArbitration, captura de imagen de disco a montar me registro para DARegisterDiskMountApprovalCallback. El problema es que cada vez que se monta una imagen de disco, la devolución de llamada se llama dos veces. ¿Por qué es y cómo puedo solucionar esto?

¿Fue útil?

Solución

terminé de codificación algo para detectar el segundo montaje e ignorarlo.

Otros consejos

Cuando un disco está montado a menudo se ve un evento para todo el disco y luego eventos para distintas particiones de ese disco. Tendrá que distinguir.

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
        ...
    }
}

Es muy práctico para poner un CFShow(dict) en el controlador de eventos y ver lo que hay.

¿Se puso un punto de interrupción en su devolución de llamada para ver lo que son la pila de llamadas cuando se le llama? Se puede le dará algunos consejos sobre lo que está pasando.

Puedo utilizar estas la captura de eso. No estoy seguro de la diferencia son a lo que estás haciendo pero funcionan.

[[[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]];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top