2009-11-02 15 views
32

मैं एक अच्छा तरीका है मेरे कोको आवेदन ही छोड़ने की बताने के लिए की तलाश में हूँ। बाकी आश्वासन दिया कि यह उत्पादन कोड के लिए इस्तेमाल नहीं किया जाएगा। मैं सिर्फ एक परीक्षण चलाने के लिए एक आसान तरीका ढूंढ रहा हूं और फिर डिबगिंग के दौरान एप्लिकेशन को बंद कर रहा हूं।मैं अपने कोको एप्लिकेशन को एप्लिकेशन के भीतर से बाहर निकलने के लिए कैसे कह सकता हूं?

मुझे पता चला है कि exit(0); ऐप बंद कर देगा, लेकिन यह सामान्य सामान्य निकास प्रक्रियाओं को छोड़ देता है, और मैं उन सभी को जगह में रखना चाहता हूं।

अनिवार्य रूप से मैं चीजों के रूप में यदि कोई उपयोगकर्ता खींच लिया मेनू से "छोड़ो" काम करना चाहता हूँ, लेकिन मैं यह स्वचालित रूप से करने के बाद मैं अपने परीक्षण के साथ समाप्त कर दिया है ऐसा करना चाहते हैं।

मेरे कोड वर्तमान में इस तरह दिखता है:

#if (SUPERFANCY_TESTING_MODE) 
    [self doSomething]; 
    exit(0); // <-- I need something better to go here 
#endif 
+3

... और, ज़ाहिर है, 'DoSomething'' होना चाहिए 'कुछ करना .... – bbum

+1

धन्यवाद, बीबीएम। मैंने इसे बदल दिया है –

उत्तर

82

आप काफी आश्वस्त रहें, कर सकते हैं, जो आपके ऐप्लिकेशन कम से कम मारे गए समय की कुछ पाने के लिए जा रहा है। इस प्रकार, बाहर निकलता है के खिलाफ exit(0);की तरह बचाव आवश्यक है।

हालांकि, NSApplication -terminate: विधि लागू करता है।

[NSApp terminate: nil]; आप क्या चाहते हैं करना चाहिए।

मैं आम तौर पर इसे -performSelector:afterDelay: के माध्यम से 0.0 के विलंब के साथ पोस्ट करने का सुझाव देता हूं ताकि इसे ईवेंट लूप के माध्यम से अगले पास के शीर्ष पर होने के लिए मजबूर किया जा सके।

उदाहरण:

[NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0]; 
+0

यह पूरी तरह से काम करता है। धन्यवाद! –

+31

आप में से उन लोगों के लिए जो घने हैं (मेरे जैसे) और सिंटैक्स बिल्कुल सही नहीं मिला (मैंने कोलन को समाप्त करने के बाद भूलना जारी रखा) पूर्ण लाइन पढ़ेगी: [एनएसएपीपी प्रदर्शन चयनकर्ता: @ चयनकर्ता (समाप्त करें :) ऑब्जेक्ट: शून्य के बाद : 0.0]; – BarrettJ

+1

इन दिनों dispatch_async शायद इसके बारे में जाने के लिए एक अच्छा तरीका होगा। –

2

ऐसा लग रहा है [NSApp समाप्त: id] मान्य नहीं है। तो, @bbum राज्यों के रूप में, इस का उपयोग करें:

[NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0]; 

यह काम करता है के रूप में मैं उम्मीद जब एक LSUIElement एप्लिकेशन का एक स्थिति पट्टी मेनू करने के लिए एक से बाहर निकलें मेनू आइटम जोड़ने।

+10

'[एनएसएपीपी समाप्त:]' बहिष्कृत नहीं है। ऑटो पूर्ण में आप जो बहिष्करण देखते हैं वह 'NSInputServiceProvider' की 'टर्मिनेट' विधि से आता है। और यदि इसे बहिष्कृत किया जाएगा तो आपको इसे 'प्रदर्शन चयनकर्ता :::' में नहीं बुलाया जाना चाहिए। –

+0

हा! अच्छा पकड़, धन्यवाद। – Matt

संबंधित मुद्दे

 संबंधित मुद्दे