Как получить уведомление о включении диска?

У меня есть проблема в OS X, когда диск подключается в выключенном состоянии, а затем включается, я не получаю уведомления о появлении нового диска. Я получаю уведомление, если подключаю диск, который уже включен.

В настоящее время я регистрирую обратные вызовы, когда диск появляется, исчезает или изменяется описание через арбитраж диска (DARegisterDiskAppearedCallback и др.). Я не вижу никаких других обратных вызовов, которые могли бы охватывать сценарий включения диска.

Как получить уведомление о включении уже подключенного накопителя?


person Collin Dauphinee    schedule 19.02.2014    source источник


Ответы (1)


NSWorkspace предоставляет уведомление, NSWorkspaceDidMountNotification, когда диск смонтирован. В схеме вы объявляете обработчик уведомлений, например:

- (void) mountNotify:(NSNotification *)notification
{
   // extract details from notification
   NSDictionary *userInfo = notification.userInfo;
   NSString *volumeMounted = userInfo[@"NSDevicePath"];
   NSString *volumeDisplayName = userInfo[@"NSWorkspaceVolumeLocalizedNameKey"];

   if (volumeMounted != nil)
   {
       // volume has been mounted
   }
}

и подпишитесь на уведомления:

[[[NSWorkspace sharedWorkspace] notificationCenter]
     addObserver:self
     selector:@selector(mountNotify:)
     name:NSWorkspaceDidMountNotification
     object:nil
];

Существует также похожее уведомление, NSWorkspaceDidUnmountNotification, когда диск размонтирован.

Дополнительные сведения см. в документе Apple NSWorkspace документация.

ХТН.

person CRD    schedule 19.02.2014
comment
Есть ли способ сделать это на С++? - person Collin Dauphinee; 19.02.2014
comment
@dauphic - Ну, Objective-C++ - это явно один из ответов. Если вам нужен интерфейс функционального уровня C, то то, что вы используете, кажется им. Однако вы получаете странную ошибку при этом. Независимо от того, включен диск или нет при подключении к компьютеру, это не имеет значения. Существует различие между присоединением устройства и его установкой, хотя обычно они связаны. Если вы не тестировали использование утверждения или других обратных вызовов, вы можете изучить это. - person CRD; 20.02.2014