我在 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/