我在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];
答案 0 :(得分:1)
我真的不明白你在那里做什么。这样的东西不起作用?
- (void)displayMyErrorVC {
MyErrorVC *errorVC = [[[MyErrorVC alloc] init] autorelease];
[self.navigationController pushViewController:errorVC animated:YES];
}
然后在你的另一个帖子中,如果你有错误:
[self performSelectorOnMainThread:@selector(displayMyErrorVC) withObject:nil waitUntilDone:NO];