2012-09-13 7 views
7

पर वॉल्यूम घुड़सवार कब होता है मेरे पास एक ओएस एक्स एप्लिकेशन है जिसे आरोहित या अनमाउंट किए जाने वाले वॉल्यूम का जवाब देने की आवश्यकता होती है।पता लगाएं कि ओएस एक्स

मैंने समय-समय पर वॉल्यूम्स की सूची को पुनर्प्राप्त करके और परिवर्तनों की जांच करके इस समस्या को हल कर लिया है, लेकिन मैं जानना चाहता हूं कि कोई बेहतर तरीका है या नहीं।

उत्तर

10

रजिस्टर सूचनाएं आप में रुचि रखते हैं की प्रक्रिया इन मात्रा से संबंधित हैं:। NSWorkspaceDidRenameVolumeNotification, NSWorkspaceDidMountNotification, NSWorkspaceWillUnmountNotification और NSWorkspaceDidUnmountNotification

2

क्या आप SCEvents जानते हैं? यह आपको सूचित किया जा सकता है जब किसी संग्रहीत फ़ोल्डर में परिवर्तन की सामग्री (/Volumes)। इस तरह आपको समय-समय पर सामग्री की जांच करने के लिए टाइमर का उपयोग करने की आवश्यकता नहीं है। सूचना केंद्र आप [[NSWorkspace sharedWorkspace] notificationCenter] से मिलता है और उसके बाद के लिए

+0

क्या नीचे वर्णित NSWorkspace पर इसका उपयोग करने का कोई कारण है? यह एक तीसरी पार्टी लाइब्रेरी है, इसलिए परियोजना को अतिरिक्त निर्भरता जोड़ने के लिए मुझे मनाने के लिए लाभ महत्वपूर्ण होना चाहिए। – Brian

15

NSWorkspace दृष्टिकोण बिल्कुल वही चीज़ है जो मैं ढूंढ रहा था। बाद में कोड की कुछ पंक्तियां, मेरे पास टाइमर का उपयोग करने से बेहतर समाधान है।

-(void) monitorVolumes 
{ 
    [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector: @selector(volumesChanged:) name:NSWorkspaceDidMountNotification object: nil]; 
    [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector: @selector(volumesChanged:) name:NSWorkspaceDidUnmountNotification object:nil]; 
} 

-(void) volumesChanged: (NSNotification*) notification 
{ 
    NSLog(@"dostuff"); 
} 
1

स्विफ्ट 4 संस्करण:

applicationDidFinishLaunching में NSWorkspace घोषित और माउंट और अनमाउंट घटनाओं के लिए पर्यवेक्षकों जोड़ें।

let workspace = NSWorkspace.shared 

workspace.notificationCenter.addObserver(self, selector: #selector(didMount(_:)), name: NSWorkspace.didMountNotification, object: nil) 
workspace.notificationCenter.addObserver(self, selector: #selector(didUnMount(_:)), name: NSWorkspace.didUnmountNotification, object: nil) 

कैद माउंट और अनमाउंट में घटनाओं:

@objc func didMount(_ notification: NSNotification) { 
    if let devicePath = notification.userInfo!["NSDevicePath"] as? String { 
     print(devicePath) 
    } 
} 
@objc func didUnMount(_ notification: NSNotification) { 
    if let devicePath = notification.userInfo!["NSDevicePath"] as? String { 
     print(devicePath) 
    } 
} 

यह डिवाइस पथ प्रिंट जाएगा, उदा/खंड/EOS_DIGITAL यहाँ स्थिरांक आप userInfo से पढ़ सकते हैं कर रहे हैं।

NSDevicePath, 
NSWorkspaceVolumeLocalizedNameKey 
NSWorkspaceVolumeURLKey