Так что [[DetailsVC alloc] init...]
это занимает несколько секунд, верно?Эта проблема заключается в том, что любые внесенные вами изменения не вступают в силу полностью до тех пор, пока не вернутся обратно к циклу выполнения, поэтому даже если вы настроили индикатор перед созданием объекта, он также ожидает завершения инициализации, чтобы сделать себя видимым,Что вам нужно сделать, так это отложить создание вашего DetailsVC
до тех пор, пока индикатор не будет настроен.
Возможно, мне проще использовать блоки, но я не могу вспомнить подробности этого из верхней частимоя голова (мало использовал блоки, так как код, который я писал в последнее время, должен был оставаться совместимым с 3.x).Но использовать performSelector
тоже легко, возьмите те две строки, которые вы впервые процитировали в своем вопросе, и поместите их в свой собственный метод, такой как:
- (void)pushDetailsView {
DetailsVC *detailsView = [[DetailsVC alloc] initWithNibName:@"DetailsVC" bundle:nil];
[self.navigationController pushViewController:detailsView animated:YES];
}
И там, где у вас были эти строки ранее, настройтеиндикатор и затем сделайте это (задержка 0 не означает, что он вызван сразу, а скорее как можно скорее после полного возврата из текущего стека вызовов):
[self performSelector:@selector(pushDetailsView) withObject:nil withDelay:0]