Frage

Ich habe ein Problem mit DiskArbitration Rahmen, um Bildfangplattenmontage ich für DARegisterDiskMountApprovalCallback registrieren. Das Problem ist, dass jedes Mal, wenn ein Plattenbild montiert ist, wird der Rückruf zweimal aufgerufen. Warum ist das so und wie kann ich dieses Problem lösen?

War es hilfreich?

Lösung

ich am Ende etwas Codierung der zweiten Halterung zu erkennen und ignorieren.

Andere Tipps

Wenn eine Platte montiert ist oft Sie ein Ereignis für die ganze Platte und dann sehen, Ereignisse für verschiedene Partitionen auf der Festplatte. Sie werden unterscheiden müssen.

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 ist sehr praktisch, ein CFShow(dict) in Ihren Event-Handler zu setzen und sehen, was Sie erhalten.

Haben setzen Sie einen Haltepunkt in Ihrem Rückruf, um zu sehen, was die Anruf-Stapel sind, wenn es aufgerufen wird? Es kann gibt Ihnen einige Hinweise auf das, was vor sich geht.

verwende ich diese der Fang, dass. Ich bin mir nicht sicher, ob der Unterschied zu diesen sind, was Sie tun, aber sie arbeiten.

[[[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]];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top