2011-06-18 13 views
5

मैं अपने रिमोट एपीआई कॉल के अच्छे चक को संभालने के लिए रेस्टकिट के ऑब्जेक्ट मैनेजर का उपयोग कर रहा हूं।रीस्टकिट में एनएसएएसएसर्ट्स को संभालना

यह त्रुटियों की एक विस्तृत श्रृंखला के लिए एनएसएएसएसर्ट फेंकता है। उदाहरण के लिए, यदि सर्वर अच्छी तरह से गठित जेसन के विपरीत एक त्रुटि पृष्ठ देता है, तो यह कोड के साथ कुछ भी गलत नहीं होने पर भी एक एनएसएएसएसर्ट उठाएगा।

कुछ चीजें मैं के बारे में उलझन में हूँ

  1. हम इन NSAsserts त्रुटियों को कैसे हैंडल करना चाहिए (जिनमें से अधिकांश अपवाद और nsasserts के सामान्य से निपटने के साथ क्या करना है) कर रहे हैं? उदाहरण के लिए, हम कुछ बार फिर से प्रयास करना चाहते हैं, फिर "कुछ गलत हो गया" संदेश दिखाएं। (आवेदन को दुर्घटनाग्रस्त करने के विरोध में)

  2. मैंने त्रुटियों (नीचे कोड) को पकड़ने के लिए कैच-ट्राई ब्लॉक का उपयोग करने की कोशिश की, लेकिन त्रुटियां नहीं पकड़ी जा रही हैं। तो मेरा ऐप बस असफल रहता है। इसके अलावा, मैं वैसे भी रिलीज मोड में कोशिश-पकड़ का उपयोग कर आरामदायक नहीं हूं।

  3. बस मेरी समझ के लिए
  4. , क्यों Restkit उपयोग NSAsserts करते हैं, के रूप में अन्य विफलता के लिए

धन्यवाद आपकी मदद के लिए एक बहुत विरोध किया - बहुत सराहना!

// code to catch NSAssert that sharedManager throws 
@try{ 
    [sharedManager loadObjectsAtResourcePath:self.resourcePath delegate:self]; 
} 

@catch (NSException *ex) { 
    NSLog(@"exception caught"); 
} 
+0

IME, लोग (स्वयं सहित) आवेषण का उपयोग करते हैं क्योंकि यह आसान है, क्योंकि यह अच्छी त्रुटि प्रबंधन नहीं है। उत्पादन कोड में ऐसे दावे नहीं होने चाहिए जो असफल हो जाते हैं क्योंकि सर्वर कचरा लौटाता है; लाइब्रेरी कोड * वास्तव में * नहीं होना चाहिए। आप 'NS_BLOCK_ASSERTIONS 1' परिभाषित कर सकते हैं और देख सकते हैं कि क्या होता है ... –

उत्तर

3

सामान्य तौर पर, आप नहींNSAssert त्रुटियों को पकड़ने के लिए, जैसा कि वे मतलब की कोशिश करनी चाहिए कि कुछ बहुत गलत हो गया - जैसे एक आवेदन आंतरिक राज्य असंगत हो जाता है, आप पुस्तकालय का गलत तरीके से उपयोग कर रहे हैं, - और इसलिए आवेदन को छोड़ने की जरूरत है। [1]

कारण अपने त्रुटियों पकड़े नहीं जा रहा है क्योंकि NSAssert को जन्म देती है एक NSInternalInconsistencyException [2] है, जो एक स्ट्रिंग और नहीं NSException का एक उदाहरण है। आप अभी भी उन्हें [3] के अनुसार पकड़ सकते हैं, उदा।

@catch (id ex) 

लेकिन ऊपर सूचीबद्ध कारणों के लिए इसकी अनुशंसा नहीं की जाती है।

अपने 3 सवाल का जवाब करने के लिए, अधिक जानकारी के चारों ओर जो NSAssert उठाया है आदि प्रदान करें

[1] What's the point of NSAssert, actually?

[2] http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/macro/NSAssert

[3] http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Exceptions/Tasks/HandlingExceptions.html

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