2012-06-19 12 views
11

मैंने हाल ही में उद्देश्य-सी सीखना शुरू किया है, और मैं एक आईओएस ऐप पर एक अभ्यास के रूप में काम कर रहा हूं, वैसे भी, मैं अपवाद फेंक कर ओवरफ्लो को संभालना चाहता हूं (मैं जावा पृष्ठभूमि से आया हूं), मैं संदर्भ की खोज केवल NSException है, लेकिन फिर मैंने उस अनुभाग में पढ़ा है जो अपवाद हैंडलिंग के बारे में विषय कहता है, और उन्होंने NSError का उपयोग करने के लिए कहा, मैंने संदर्भ पढ़ा लेकिन उनके पास समान प्रोटोकॉल और विधियां थीं, तो उनके बीच क्या अंतर है? और कौन सा बेहतर है?एनएसईएक्सप्शन और एनएसईआरआरआर कस्टम अपवाद/त्रुटि

इसके अलावा, मैं अपना अपवाद या त्रुटि वर्ग बनाना चाहता हूं, क्या कोई तरीका या फ़ील्ड है जिसमें मुझे शामिल करना चाहिए? (जावा में Exception इंटरफेस को कार्यान्वित करते समय)। धन्यवाद

उत्तर

21

NSError गैर-घातक, पुनर्प्राप्ति योग्य त्रुटियों के लिए डिज़ाइन किया गया है। NSError द्वारा कैप्चर किए जाने वाले समस्याओं को अक्सर उपयोगकर्ता त्रुटियां (या उपयोगकर्ता को त्रुटियों को प्रस्तुत किया जा सकता है), अक्सर (इसलिए -presentError: और NSErrorRecoveryAttempting) से पुनर्प्राप्त किया जा सकता है, और आम तौर पर अपेक्षित या अनुमानित त्रुटियां होती हैं (जैसे कि उस फ़ाइल को खोलने की कोशिश करना जिस पर आपके पास पहुंच नहीं है, या असंगत स्ट्रिंग एन्कोडिंग के बीच कनवर्ट करने का प्रयास कर रहा है)।

NSException संभावित घातक, प्रोग्रामर त्रुटियों के लिए डिज़ाइन किया गया है। इन त्रुटियों को आपके एप्लिकेशन में संभावित त्रुटियों को इंगित करने के लिए डिज़ाइन किया गया है, जहां आपने कुछ संचालन करने के लिए पूर्व-स्थितियों को सही ढंग से चेक नहीं किया है (जैसे किसी सरणी इंडेक्स को एक्सेस करने का प्रयास करना जो इसकी सीमा से परे है, या एक अपरिवर्तनीय ऑब्जेक्ट को म्यूट करने का प्रयास करता है)। Exception Programming Guide का परिचय यह थोड़ा सा बताता है।

+0

ओह, ठीक है। तो अतिप्रवाह को संभालने के लिए मुझे अपवाद का उपयोग करना चाहिए, क्योंकि यह मेरे आवेदन में एक दोष है? –

+1

हां, अगर यह एक अप्रत्याशित स्थिति है जो सही कोड के साथ नहीं होनी चाहिए। –

+0

ओह धन्यवाद, लेकिन प्रश्न के दूसरे भाग के बारे में क्या, अपना खुद का अपवाद वर्ग बना रहा है? –