iphone - UINavigationController 呈现空白 View

标签 iphone uinavigationcontroller

我在 iPhone 上遇到了一个非常奇怪的 UINavigationController 问题,为此我正在用头撞墙。

要点是我正在执行对服务器的调用,当该调用失败时,我将当前 View 替换为包含错误消息的 View 。使用performSelectorOnMainThread 在主线程上调用有问题的代码

实际情况是,设备上大约有一半的时间会显示空白屏幕。在模拟器上,它每次都会呈现一个空白屏幕,这让我认为这可能是某种计时问题,由于模拟器中的处理速度更快,该问题更加突出。如果我通过单击 ui 中的按钮来显示页面来调用相同的函数,则效果非常好,因此我不认为代码本身有问题。

我已经验证我添加的 Controller 位于导航堆栈中。已验证它在主线程上被调用,它是可见的,帧大小和位置正确。我尝试显式地将 View 设置为可见,将其移动到其父 View 的前面并调用 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]; 

最佳答案

我真的不明白你在那里做什么。这样的事情行不通?

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

然后在另一个线程中,如果出现错误:

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

关于iphone - UINavigationController 呈现空白 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3950416/

相关文章:

iphone - 将纬度和经度转换为 x 和 y 坐标

iphone - UIWebView 中的 EXC_BAD_ACCESS

ios - didBecomeActive 取消暂停游戏

iphone - 如何使用 UIButtonBarItem 触发方法?

ios - 导航栏和 Controller View 之间的自定义栏

ios - 黑色 UITableViewCell DetailDisclosure 附件按钮?

iphone - 如何推送 ViewController 并让第一个 Controller 部分可见?

ios - 使用 SearchController 进行搜索时使用标签栏出现黑屏

ios - 如何从导航 Controller 中删除 View

objective-c - 无法从一个特定屏幕问题导航仅在 iOS 11 中