2010-07-29 5 views
169

में ब्लॉक ब्लॉक क्यों @try ब्लॉक काम नहीं करता है? यह ऐप को दुर्घटनाग्रस्त कर दिया, लेकिन इसे @ ट्री ब्लॉक द्वारा पकड़ा जाना था।@ ट्री - उद्देश्य-सी

NSString* test = [NSString stringWithString:@"ss"]; 

@try { 
    [test characterAtIndex:6]; 

} 
@catch (NSException * e) { 
    NSLog(@"Exception: %@", e); 
} 
@finally { 
    NSLog(@"finally"); 
} 
+2

आप एनएसएसटींग * test = [NSString stringWithString: @ "ss"] को प्रतिस्थापित कर सकते हैं; एनएसएसटींग * टेस्ट = @ "एसएस" के साथ; –

उत्तर

69

अब मुझे समस्या मिली है।

मेरे ब्रेकपॉइंट्स से obj_exception_throw को हटाकर हल किया गया। अब यह @try ब्लॉक द्वारा पकड़ा गया है और यदि @try ब्लॉक गुम है तो इसे संभाल लेंगे।

+10

यदि आप डीबगर ब्रेक करते समय जारी रखते हैं, तो आपको अपवाद को फेंक दिया जाना चाहिए और आपके हैंडलर द्वारा पकड़ा जाना चाहिए। – JeremyP

11

आप इसे कुछ और ही है क्योंकि सटीक कोड आप ऊपर चिपकाया है ठीक काम करता है नहीं है यकीन है।

2010-07-29 16:45:57.677 test[93103:207] Exception: *** -[NSCFString characterAtIndex:]: Range or index out of bounds 
2010-07-29 16:45:57.678 test[93103:207] finally 
104

सभी पूरी तरह से काम :)

NSString *test = @"test"; 
    unichar a; 
    int index = 5; 

    @try { 
     a = [test characterAtIndex:index]; 
    } 
    @catch (NSException *exception) { 
     NSLog(@"%@", exception.reason); 
    } 
    @finally { 
     NSLog(@"Char at index %d cannot be found", index); 
     NSLog(@"Max index is: %d", [test length]-1); 
    } 

प्रवेश करें:

[__NSCFConstantString characterAtIndex:]: सूचकांक 5 पर सीमा या सूचकांक सीमा

की

चार बाहर नहीं पाया जा सकता है

अधिकतम सूचकांक है: 3

+5

सही लेकिन थोड़ा भ्रामक - याद रखें कि @finally ब्लॉक दोनों मामलों में निष्पादित हो जाता है, यानी इस पर ध्यान दिए बिना कि अपवाद था या नहीं फेंक दिया गया था। – Elendurwen

+0

हाँ, मुझे यह याद आती है :) – iTux

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