我正在开发一个带有UINavigatorController的应用程序。我在第二个推送的viewController中使用viewDidAppear方法在外部服务器中查找信息。
好。虽然iOS5在开始时运行良好,但我意识到在iOS4.3中没有调用viewDidAppear所以我将这段代码放在根目录中:
- (void)navigationController:(UINavigationController *)navigationController
didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
[viewController viewDidAppear:animated];
}
此后,该应用程序开始在iOS4.3中正常运行。然而,在iOS5中没有,因为它调用了两次viewDidAppear(首先调用的那个和navigationController:didShowViewController:animated:
中的那个)
如果只调用一次viewDidAppear,我该怎么做?
非常感谢
答案 0 :(得分:4)
我看到的唯一真正的解决方案(或者更确切地说是iOS 4.x的解决方法),如果你在viewWillAppear-call中设置了某种状态,并检查它是否在后续调用中被设置,例如。
-(void)viewWillAppear:(BOOL)animated {
if (!viewWillAppearCalled) {
viewWillAppearCalled = YES;
/* do stuff */
}
}
然后您可以安全地手动调用它以与iOS 4.x兼容。
viewDidAppear,viewWillDisappear和viewDidDisappear可以做同样的事情。
答案 1 :(得分:2)
您可能还有另一个问题(为什么不在iOS 4上调用viewDidAppear)。
然而,我在这方面遇到了iOS 5和iOS 4之间的不一致,因为我使用了自定义容器视图控制器(既不是UINavigationController也不是UITabBarController)。恢复iOS 4兼容性的修复方法是在容器视图控制器中实现以下方法:
- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers {
return NO;
}
答案 2 :(得分:1)
使用[[UIDevice currentDevice] systemVersion]检查用户正在运行的iOS版本;如果它是4.3,则调用viewDidAppear方法。
答案 3 :(得分:0)
如果它被调用两次并且您只能在将代码添加到根导航时进行调用,为什么不从viewDidAppear(您在iOS5上创建的第一个代码)中删除代码并仅保留一个在4.3和5都有效的人吗?
答案 4 :(得分:-1)
您不应该手动拨打viewDidAppear:
,请将其留给UIKit
为您拨打电话。如果删除手动调用,则只应调用一次。