Doppel Rückruf von Disk-Arbitration bei der Montage Disk-Image
-
04-10-2019 - |
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?
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]];