@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.