2014-02-19 38 views
0

我在OS X上遇到了一個問題,如果在斷電時插入驅動器,然後打開電源,我不會收到有關出現新磁盤的通知。如果插入已打開電源的驅動器,我確實收到通知。如何獲取正在啓動的驅動器的通知?

目前,我正在爲磁盤出現,消失或通過磁盤仲裁(DARegisterDiskAppearedCallback等)更改描述時註冊回調。我沒有看到任何其他可能涵蓋驅動器開啓情況的回調。

如何在已插入驅動器的情況下接收通知?

回答

2

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 documentation

HTH。

+0

有什麼辦法可以在C++中完成這個任務嗎? –

+0

@dauphic - 很好Objective-C++顯然是一個答案。如果你想要一個C函數級接口,那麼你正在使用的就是它。但是,你會得到一個奇怪的錯誤。連接到計算機時磁盤是否已打開或關閉,應該沒有任何區別。連接設備和安裝設備是有區別的,儘管兩者通常是連接的。如果您尚未使用批准或其他回調進行測試,則可能需要查看該回調。 – CRD