2009-09-10 5 views
3

이동식 저장소가 마운트 해제되거나 USB에서 강제로 분리 될 때 발생하는 이벤트를 감지해야하는 응용 프로그램에서 작업하고 있습니다. 어떻게 이러한 이벤트를받을 수 있습니까?이동식 저장소가 마운트 해제 될 때 감지

장치를 원활하게 마운트 해제 할 수있는 첫 번째 가능성은 NSWorkspace입니다.이 클래스는 장치를 마운트 해제하는 방법이 -unmountAndEjectDeviceAtPath:입니다. 누군가가 언 마운트 된 볼륨을 감지하는 샘플 코드를 가르쳐 줄 수 있습니까?

답변

6
+0

Amit Singh의 저서 "Mac OS X Internals : A Systems Approach"에서도 설명되어 있습니다. –

+0

문서는 http://developer.apple.com/documentation/Darwin/Reference/DiscArbitrationFramework/ –

+0

에서 찾을 수 있습니다. @QuinnTaylor : 설명서 링크가 추가되었습니다. 감사! –

10

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]; 
그런 다음 소스 번들에서 http://growl.info/source.php 을 확인 전체 구현을 위해

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

람 알림에 반응하는 방법을 구현해야

Extras/HardwareGrowler로 이동하여 체크 아웃하십시오. VolumeNotifier.h/m

업데이트 :

Peters 대답은 이것보다 우수합니다. 이 문제가 발생하면 Disk Arbitration 프레임 워크를 사용해보십시오.

+1

사람과 저는 HardwareGrowler ! 나는 그런 수업 방법을 만들지는 않을 것이다. 언젠가는 다른 일들이 그렇게 힘들지 않을 때, 나는 알리미를 (다른 정리들 사이에서) 예를 찾아 가서 바꿀 계획이다. –

+0

배경 앱으로 만들어야합니다.) – stigi