РЕДАКТИРОВАТЬ: Проблема была решена (частично): это ошибка симулятора. Я скомпилировал и протестировал это на двух устройствах с iOS 3.1.3 и 4.0. Исключение было обработано правильно. Будьте осторожны, симулятор - ваш враг!
это сводит меня с ума. Я не знаю, как включить обработку исключений в моем проекте. Посмотрите на вывод кода и отладчика ниже.
Моя цель - перехватить исключение, а не исправлять код, чтобы исключение было обработано и приложение не зависало.
Я использую XCode 3.2.3, iPhone SDK 4, финал. Я только что создал приложение для iPhone на основе простого представления, чтобы проверить это.
Я посмотрел в настройках своего проекта и да, переключатель «Включить исключения Objective-C» отмечен. Я использую GCC 4.2.
Когда я подробно рассмотрю процесс сборки, флаг -fno-objc-exceptions компилятора отсутствует в списке аргументов!
Что мне здесь не хватает?
Спасибо заранее
Ник
NSArray * foo = [[NSArray alloc] init];
@try {
NSLog(@"trying...");
[foo objectForKey:@"yeah"];
}
@catch (NSException * e) {
NSLog(@"catching %@ reason %@", [e name], [e reason]);
}
@finally {
NSLog(@"finally");
}
ведет к
trying...
-[__NSArrayI objectForKey:]: unrecognized selector sent to instance 0x5d5f780
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI objectForKey:]: unrecognized selector sent to instance 0x5d5f780'
*** Call stack at first throw:
(
0 CoreFoundation 0x02393919 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x024e15de objc_exception_throw + 47
2 CoreFoundation 0x0239542b -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3 CoreFoundation 0x02305116 ___forwarding___ + 966
4 CoreFoundation 0x02304cd2 _CF_forwarding_prep_0 + 50
...
)
terminate called after throwing an instance of 'NSException'
Достигнут ли когда-либо улов, ни последний блок.