Я нашел проблему! Я только что обнаружил, что проблема указана в строке:
[(UINavigationController *)[self topViewController].navigationController popToViewController:rootViewControler animated:YES];
Мой код пытался получить доступ к свойству navigationController после отклонения topViewController view (его родитель).
Решением для этого было сохранение navigationController сильного текста во временной переменной перед dismiss topViewController после @try
:
UINavigationController * aNavigationController = (UINavigationController *)[[self topViewController] navigationController];
Наконец:
-(void) theProblemMethod
{
dispatch_async(dispatch_get_main_queue(), ^{
@try {
UINavigationController * aNavigationController = (UINavigationController *)[[self topViewController] navigationController];
[[self topViewController] dismissViewControllerAnimated:YES completion: ^{
UIViewController * rootViewControler = nil;
if ((rootViewControler = (UIViewController *) [UIApplication sharedApplication].keyWindow.rootViewController))
{
[(UINavigationController *)[self topViewController].navigationController popToViewController:rootViewControler animated:YES];
if ((rootViewControler = (UIViewController *) [[[[UIApplication sharedApplication] delegate] window] rootViewController].presentedViewController)) {
[rootViewControler dismissViewControllerAnimated:YES completion:
^{
//do something here
}];
}
}
}];
} @catch (NSException *exception) {
NSLog(@"There is a problem at [myClass theProblemMethod] Exception: %@, reason: %@", [exception name], [exception reason]);
} @finally {}
});
}
В основном я удаляю A и одновременно пытаюсь вызвать его дочернего элемента A.child внутри A rightпосле A был удален.