UINavigationController呈现空白视图

时间:2010-10-16 19:27:35

标签: iphone uinavigationcontroller

我在iphone上使用UINavigationController时遇到了一个非常奇怪的问题,而且我正撞在墙上。

它的主旨是我正在执行对服务器的调用,当该调用失败时,我将当前视图与包含错误消息的视图交换出来。使用performSelectorOnMainThread

在主线程上调用有问题的代码

在实践中发生的事情是,在设备上,它显示空白的白色屏幕大约一半的时间。在模拟器上它每次都会出现一个空白屏幕,让我觉得这可能是某种时序问题,由于模拟器中更好的处理速度而更加突出。如果我通过单击ui中的按钮来显示页面来调用相同的函数,这样就可以完美地工作,所以我认为这不是代码本身的问题。

我已经确认我添加的控制器位于导航堆栈中。已验证它在主线程上被调用,它是可见的,帧大小和位置是正确的。我已经尝试明确地将视图设置为可见,将其移动到其父视图中的前面并调用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 个答案:

答案 0 :(得分:1)

我真的不明白你在那里做什么。这样的东西不起作用?

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

然后在你的另一个帖子中,如果你有错误:

[self performSelectorOnMainThread:@selector(displayMyErrorVC) withObject:nil waitUntilDone:NO];