@try - Bắt khối trong Objective-C


193

Tại sao khối @try không hoạt động? Nó bị sập ứng dụng, nhưng nó được cho là bị chặn bởi khối @try.

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

 @try {
    [test characterAtIndex:6];

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

Bạn có chắc chắn đó không phải là một cái gì khác bởi vì mã chính xác mà bạn đã dán ở trên hoạt động tốt. 2010 / 07-29 16: 45: 57.677 cuối cùng
mbogh

2
Bạn có thể thay thế NSString * test = [NSString chuỗiWithString: @ "ss"]; với NSString * test = @ "ss";
Duyên-Hoa

Câu trả lời:


136

Tất cả đều hoạt động hoàn hảo :)

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

Nhật ký:

[__NSCFConstantString characterAt Index:]: Phạm vi hoặc chỉ mục ngoài giới hạn

Char ở chỉ số 5 không thể được tìm thấy

Chỉ số tối đa là: 3

Điều kiện cuối cùng


8
Đúng nhưng hơi sai lệch - hãy nhớ rằng khối @finally được thực thi trong các trường hợp CẢ, tức là bất kể ngoại lệ là hay không được ném.
Elendurwen

Vâng, tôi nhớ điều này :)
iTux

Vui lòng sửa như @Elendurwen lưu ý.
Sanich

78

Bây giờ tôi đã tìm thấy vấn đề.

Loại bỏ các obj_exception_throwđiểm dừng của tôi đã giải quyết điều này. Bây giờ, nó bị bắt bởi @trykhối và đồng thời, NSSetUncaughtExceptionHandlersẽ xử lý việc này nếu một @trykhối bị thiếu.


10
NẾU bạn nhấn tiếp tục khi trình gỡ lỗi phá vỡ, bạn sẽ thấy ngoại lệ bị ném và bắt bởi trình xử lý của bạn.
JeremyP

1

Mục tiêu-C không phải là Java. Trong các trường hợp ngoại lệ Objective-C là những gì chúng được gọi. Ngoại lệ! Đừng sử dụng chúng để xử lý lỗi. Đó không phải là đề xuất của họ. Chỉ cần kiểm tra độ dài của chuỗi trước khi sử dụng characterAt Index và mọi thứ đều ổn ....


Nói chung, không nên sử dụng tính năng thử bắt trong Objective-C vì nó có thể gây rối ARC.
chậm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.