2009-09-10 14 views
3

Je travaille sur une application qui devrait détecter les événements qui se produisent lorsque le stockage amovible est démonté ou déconnecté de force de l'USB. Comment puis-je recevoir ces événements?Détection lorsque le stockage amovible est démonté

J'ai vu NSWorkspace pour la première possibilité de démonter en douceur le périphérique, mais cette classe a des méthodes comme -unmountAndEjectDeviceAtPath: pour démonter un périphérique. Quelqu'un peut-il me diriger vers un exemple de code qui détecte les volumes non montés?

Répondre

6
+0

Il est également décrit dans le livre d'Amit Singh «Mac OS X Internals: A Systems Approach». –

+0

La documentation peut maintenant être trouvée sur http://developer.apple.com/documentation/Darwin/Reference/DiscArbitrationFramework/ –

+0

@QuinnTaylor: Liens de documentation ajoutés. Merci! –

10

Un pice de code à partir HardwareGrowler:

NSWorkspace *workspace = [NSWorkspace sharedWorkspace]; 
NSNotificationCenter *center = [workspace notificationCenter]; 

[center addObserver:[VolumeNotifier class] selector:@selector(volumeDidMount:) name:NSWorkspaceDidMountNotification object:nil]; 
[center addObserver:[VolumeNotifier class] selector:@selector(volumeDidUnmount:) name:NSWorkspaceDidUnmountNotification object:nil]; 
[center addObserver:[VolumeNotifier class] selector:@selector(volumeWillUnmount:) name:NSWorkspaceWillUnmountNotification object:nil]; 

Vous devez ensuite mettre en œuvre les méthodes pour réagir sur les notifications ala

+ (void) volumeDidUnmount:(NSNotification *)aNotification; 
{ 
... 
} 

Pour la mise en œuvre tout vérifier http://growl.info/source.php Dans le paquet source aller à Extras/HardwareGrowler et y jeter un oeil VolumeNotifier.h/m

MISE À JOUR:

La réponse de Peters est supérieure à celle-ci. S'il vous plaît envisager d'utiliser le cadre d'arbitrage de disque si vous venez à propos de ce problème.

+1

Man, et je travaille sur HardwareGrowler ! Je ne ferais pas ces méthodes de classe, cependant. Un jour, quand d'autres choses ne sont pas si pressantes, j'ai l'intention de passer à travers et de changer les notificateurs en instances (entre autres nettoyages). –

+0

Assurez-vous d'en faire une application en arrière-plan;) – stigi