@try - ऑब्जेक्टिव-सी में ब्लॉक ब्लॉक


193

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

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

 @try {
    [test characterAtIndex:6];

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

क्या आप सुनिश्चित हैं कि यह कुछ और नहीं है क्योंकि आपके द्वारा ऊपर सटीक कोड ठीक काम करता है। 2010-07-29 16: 45: 57.677 परीक्षण [93103: 207] अपवाद: *** - [NSCFString characterAtIndex:]: सीमा या सीमा से बाहर 2010-07-29 16: 45: 57.678 परीक्षण [93103: 207] अंत में
mbogh

2
आप NSString * परीक्षण की जगह ले सकते हैं = [NSString stringWithString: @ "ss"]; NSString के साथ * परीक्षण = @ "ss";
ड्यूएन-होआ

जवाबों:


136

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

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

लॉग इन करें:

[__NSCFConstantString characterAtIndex:]: सीमा या सीमा से बाहर

सूचकांक 5 पर चार नहीं मिल सकता है

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

अंत में शर्त


8
सही लेकिन थोड़ा गुमराह करने वाला - याद रखें कि @ ब्लॉक ब्लॉक को बीओटीएच मामलों में निष्पादित किया जाता है, अर्थात बिना इस बात की परवाह किए कि अपवाद था या नहीं फेंका गया था।
एलेंडुरवेन जू

हाँ, मुझे यह याद है :)
iTux

कृपया नोट करें @Elendurwen के रूप में तय।
सानिच

78

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

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


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

1

Objective-C जावा नहीं है। ऑब्जेक्टिव-सी अपवाद में वे कहे जाते हैं। अपवाद! त्रुटि से निपटने के लिए उनका उपयोग न करें। यह उनका प्रस्ताव नहीं है। बस characterAtIndex और सब कुछ ठीक है का उपयोग करने से पहले स्ट्रिंग की लंबाई की जाँच करें ....


ऑब्जेक्टिव-सी में ट्राई-कैच का उपयोग करना आमतौर पर अनुशंसित नहीं होता है क्योंकि यह एआरसी को संभावित रूप से गड़बड़ कर सकता है।
धीमी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.