@try - Objective-C'deki bloğu yakala


193

@Try block neden çalışmıyor? Uygulamayı kilitledi, ancak @try bloğu tarafından yakalanması gerekiyordu.

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

 @try {
    [test characterAtIndex:6];

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

Başka bir şey olmadığından emin misiniz, yukarıda yapıştırdığınız tam kod iyi çalışıyor. 2010-07-29 16: 45: 57.677 testi [93103: 207] İstisna: *** - [NSCFString characterAtIndex:]: Sınır dışında aralık veya dizin 2010-07-29 16: 45: 57.678 testi [93103: 207] nihayet
mbogh

2
NSString * test = [NSString stringWithString: @ "ss"]; NSString * test = @ "ss" ile;
Duyen-Hoa

Yanıtlar:


136

Hepsi mükemmel çalışıyor :)

 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");
 }

Log:

[__NSCFConstantString characterAtIndex:]: Aralık veya dizin sınırların dışında

Dizin 5'teki karakter bulunamadı

Maksimum endeks: 3

Son olarak koşul


8
Doğru ama biraz yanıltıcı - BOTH vakalarında @finally bloğunun yürütüldüğünü, yani istisnanın atılıp atılmadığına bakılmaksızın, unutmayın.
Elendurwen

Evet, bunu özledim :)
iTux

Lütfen @Elendurwen'ın belirttiği gibi düzeltin.
Sanich

78

Şimdi sorunu buldum.

Çıkarma obj_exception_throwbenim kesme noktaları bu çözüldü. Şimdi @tryblok tarafından yakalandı ve ayrıca NSSetUncaughtExceptionHandlerbir @tryblok eksikse bunu halledecek .


10
Hata ayıklayıcı bozulduğunda devam ederseniz, istisnanın işleyiciniz tarafından atıldığını ve yakalandığını görmelisiniz.
JeremyP

1

Objective-C Java değildir. Objective-C'de istisnalar bunlardır. İstisnalar! Hata işleme için kullanmayın. Bu onların teklifi değil. CharacterAtIndex'i kullanmadan önce dizenin uzunluğunu kontrol edin ve her şey yolunda ...


Hedef-C'de try-catch kullanılması genellikle ARC'yi bozabileceği için önerilmez.
yavaşça
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.