मुझे विभिन्न NSTask के निष्पादन में समस्या हो रही है समान लॉन्च पाथ
, अलग तर्क
। मेरे पास एक ऐसा वर्ग है जो अपने स्वयं के NSTask
ऑब्जेक्ट्स को नियंत्रित करता है और उन उदाहरणों के आधार पर इन उदाहरणों को आरंभ किया गया था - निर्भर NSTask
ऑब्जेक्ट बनाया जा रहा है मेरे पास दो शुरुआती हैं:
// कार्य समाप्त करने के लिए विधि - (शून्य) कार्यफिनिश्ड: (एनएसएनोटिफिकेशन *) एक सूचना {{myTask release]; MyTask = शून्य; [स्व निर्मितटास्क]; } // नामित प्रारंभिक - (आईडी) init {self = [super init]; यदि (आत्म! = शून्य) {[[एनएसएनटिफिकेशन केंद्र की डिफ़ॉल्ट केंद्र] AddObserver: स्वयं चयनकर्ता: @ सिलेक्टर (कार्यफूर्ण :) नाम: एनएसटीस्कडीडटीर्फ़ीनेट नोटिफिकेशन ऑब्जेक्ट: शून्य]; [स्व निर्मितटास्क]; } स्वस्थ वापसी; } // सुविधा प्रारंभकर्ता - (आईडी) initWithCommand: (NSString *) उप कमांड {आत्म = [आत्म init]; अगर (स्वयं) {[स्वयं सेट कॉमांड: उप कॉमांड]; } स्वस्थ वापसी; }
और यहां createTask
विधि है:
- (शून्य) createTask {// myTask एक संपत्ति परिभाषित है जैसा NSTask * myTask = [[NSTask alloc] init]; [MyTask setLaunchPath: @ "/ usr / bin / निष्पादन योग्य"]; }
NSOutlineView में विभिन्न पंक्तियों को चुनकर क्रियाएं निष्पादित की जाती हैं (PXSourceList को एक आवरण के रूप में उपयोग करना):
- (शून्य) स्रोत लिस्टसेलेक्ट डीड चेंज: (NSNotification *) सूचना {आईडी स्रोत सूची = [सूचना वस्तु]; NSIndexSet * चयन = [sourceList चयनितरौ इंडेक्सस]; NSString * पहचानकर्ता = [[sourceList itemAtRow: [चयन पहली इंडैक्स]] पहचानकर्ता]; // इस तरह से `/ usr / bin / executable $ {identifier}` बनाया जा रहा है MyCommand * command = [[MyCommand alloc] initWithSubcommand: पहचानकर्ता]; // इस पद्धति का निष्पादन [myTask प्रक्षेपण]; [कमान निष्पादन]}
समस्या यह है कि केवल पहले को निष्पादित किया जाता है। दूसरे वाले "क्लिक" ईवेंट को भी ट्रिगर नहीं करते (लक्ष्य-क्रिया के माध्यम से) मुझे लगता है कि यह लॉन्च पाथ का कारण हो सकता है जिसे मैं प्रयोग करने की कोशिश कर रहा हूं, 'सरल कारण / bin / ls
ठीक काम करता है टर्मिनल में एक ही कमांड 0 रिटर्न मूल्य (यानी सभी ठीक हैं)। कोई भी गाइड या मिलाकर बहुत सराहना की जाती है।
मैं समझ नहीं सकता क्यों ... लेकिन उस NSTask से पढ़ा जा सकता है केवल एक बार चलाया जा सकता है ....
NSTask का उपयोग कर, आपका प्रोग्राम एक अन्य प्रोग्राम को एक उपप्रोसेस के रूप में चला सकता है और उस कार्यक्रम के निष्पादन को मॉनिटर कर सकता है। NSTask एक अलग निष्पादन योग्य इकाई बनाता है; NSThread के विपरीत, यह मेमोरी स्पेस को मूल प्रक्रिया के साथ साझा नहीं करता है डिफ़ॉल्ट रूप से, एक कार्य अपने माता-पिता के वातावरण की कई विशेषताओं को प्राप्त करता है: वर्तमान निर्देशिका, मानक इनपुट, मानक आउटपुट, मानक त्रुटि, और किसी भी परिवेश चर के मान यदि आप इनमें से कोई भी बदलना चाहते हैं, उदाहरण के लिए, वर्तमान निर्देशिका, आपको कार्य शुरू करने से पहले आपको एक नया मान सेट करना होगा। एक कार्य का माहौल स्थापित हो जाने के बाद स्थापित होता है।
एक NSTask केवल एक ही बार चलाया जा सकता है। एक NSTask को चलाने के बाद के प्रयासों में कोई त्रुटि उत्पन्न होती है।
यदि आप किसी दस्तावेज़-आधारित अनुप्रयोग में एक दस्तावेज़ से कार्य चलाते हैं, तो आपको (कम से कम) को समाप्त संदेश भेजना चाहिए दस्तावेज़ के लिए क्लीनअप कोड में कार्य उदाहरण अधिक चर्चा के लिए NSTaskTermination भी देखें।
यह हास्यास्पद लगता है ... अगर मुझे कोई जानकारी मिलती है तो मैं शोध करूँगा और वापस पोस्ट करूँगा, आमतौर पर विश्वसनीय है।)
Comments
Post a Comment