UINavigationController представляет пустой вид - PullRequest
2 голосов
/ 16 октября 2010

У меня очень странная проблема с UINavigationController на iphone, и я бью головой об стену.

Суть в том, что я выполняю вызов на сервер, и когда этот вызов не удается, я заменяю текущее представление на представление, содержащее сообщение об ошибке. Соответствующий код вызывается в основном потоке с помощью executeSelectorOnMainThread

На практике происходит то, что на устройстве он показывает пустой белый экран примерно в два раза меньше. На симуляторе каждый раз появляется пустой экран, заставляющий меня думать, что это, возможно, какая-то проблема синхронизации, которая более заметна из-за лучшей скорости обработки в симуляторе. Это прекрасно работает, если я вызываю ту же функцию, нажимая кнопку в пользовательском интерфейсе для отображения страницы, поэтому я не думаю, что это проблема с самим кодом.

Я убедился, что добавляемый контроллер находится в стеке навигации. Проверено, что он вызывается в главном потоке, он виден, размер и расположение кадра правильные. Я попытался явно установить вид, чтобы быть видимым, переместил его на передний план в родительском виде и вызвал setNeedsDisplay и даже вручную вызвал drawRect. Ничего из этого не работает.

Есть мысли о том, что здесь может происходить? Я предполагаю, что это как-то связано с циклом выполнения, но я не могу понять это. Помощь будет высоко ценится. Относительно простой рассматриваемый код ниже

 UINavigationController* navController = self.navigationController; 

 int count = [navController.viewControllers count];

 NSMutableArray* controllers = [[NSMutableArray alloc] initWithCapacity:count];

 for (int i=0; i<count; i++) {
  if (self == [self.navigationController.viewControllers objectAtIndex:i]) {
   [controllers addObject:newController];
  }
  else {
   [controllers addObject:[self.navigationController.viewControllers objectAtIndex:i]];
  }

 }
 [self.navigationController setViewControllers:controllers animated:YES];
 [controllers release]; 

1 Ответ

1 голос
/ 16 октября 2010

Я действительно не понимаю, что ты там делаешь. Что-то подобное не сработает?

- (void)displayMyErrorVC {
    MyErrorVC *errorVC = [[[MyErrorVC alloc] init] autorelease];          
    [self.navigationController pushViewController:errorVC animated:YES];
}

А потом в другой ветке, если у вас ошибка:

[self performSelectorOnMainThread:@selector(displayMyErrorVC) withObject:nil waitUntilDone:NO];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...