Domanda

Ho un problema utilizzando il framework DiskArbitration, immagine del disco cattura del montaggio mi iscrivo per DARegisterDiskMountApprovalCallback. Il problema è che ogni volta un'immagine disco è montato, il callback viene chiamato due volte. Perché è questo e come posso risolvere questo problema?

È stato utile?

Soluzione

Ho finito di codifica qualcosa per rilevare il 2 ° montare e ignorarlo.

Altri suggerimenti

Quando un disco è montato si vedono spesso un evento per tutto il disco e poi gli eventi per le partizioni distinte su tale disco. Avrete bisogno di distinguere.

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

E 'molto utile per mettere un CFShow(dict) nel vostro gestore di eventi e vedere quello che si ottiene.

Hai messo un punto di interruzione nel vostro callback per vedere quali sono i call-stack quando si chiama? Essa può ti dà alcuni suggerimenti su ciò che sta accadendo.

io uso questi il ??fermo che. Non sono sicuro della differenza di questi sono per quello che stai facendo, ma funzionano.

[[[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]];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top