Зависит от последовательности push и pop для пакетных операций. Если первая операция прошла успешно, остальные ошибки будут пропущены.
// [self.navigationController popToViewController:f3 animated:YES];
[self.navigationController pushViewController:f1 animated:YES];
[self.navigationController pushViewController:f2 animated:YES];
[self.navigationController pushViewController:f5 animated:YES];
[self.navigationController pushViewController:f6 animated:YES];
Теперь раскомментируйте первую строку, появится ошибка. Но если первая строка находится в конце операции, ничего не произошло. Точно так же
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// [self.navigationController popToViewController:f5 animated:YES];
[self.navigationController popToViewController:f3 animated:YES];
});
Раскомментирование первой строки не вызовет каких-либо проблем, если первая операция была успешно выполнена.
Экстремальный пример подобен следующему, который все еще будет в порядке.
[self.navigationController pushViewController:f1 animated:YES];
[self.navigationController pushViewController:f2 animated:YES];
[self.navigationController popToViewController:f5 animated:YES];
[self.navigationController popToViewController:f6 animated:YES];
[self.navigationController popToViewController:f3 animated:YES];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.navigationController popToViewController:f1 animated:YES];
[self.navigationController popToViewController:f3 animated:YES];
[self.navigationController popToViewController:f6 animated:YES];
});
Надеюсь, что это ответ.