Я заметил странное поведение в iOS 5: NSSetUncaughtExceptionHandler (), похоже, больше ничего не делает.
У меня есть следующий код:
static NSString* documentsDirectory()
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
return basePath;
}
static void handleException(NSException *exception)
{
// Write something to the documents dir
NSString* path = [documentsDirectory() stringByAppendingPathComponent:@"crashlog.txt"];
NSString* str = @"Handled exception";
NSError* err;
if(![str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&err])
{
NSLog(@"Failed to write to file");
}
NSLog(@"Handled exception");
}
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSSetUncaughtExceptionHandler(&handleException);
[NSException raise:@"Test" format:@"Testing"];
...
}
Код вышеработает на любом устройстве или симуляторе под управлением 4.x или ранее.Однако, когда я запускаю его на симуляторе 5.0, обработчик исключений не вызывается (не записывает файл в каталог документов, не регистрирует и не запускает, если я устанавливаю точку останова внутри обработчика).
К сожалению, у меня нет устройства 5.0, доступного для тестирования, поэтому я надеюсь, что кто-то может подтвердить, что оно не работает на 5.0, чтобы я мог отправить отчет об ошибке (или исправить меня, если есть проблема).с моим кодом).