ViewDid在iOS5中调用了两次
我正在开发一个带有uinavigator控制器的应用程序。我正在使用第二个按下的viewController中的ViewDidEmerge方法在外部服务器中查找信息 嗯。虽然在iOS5中一开始运行良好,但我意识到在iOS4.3中没有调用viewDidAppear,因此我将以下代码放在根目录中:ViewDid在iOS5中调用了两次,ios,uinavigationcontroller,ios5,viewdidappear,Ios,Uinavigationcontroller,Ios5,Viewdidappear,我正在开发一个带有uinavigator控制器的应用程序。我正在使用第二个按下的viewController中的ViewDidEmerge方法在外部服务器中查找信息 嗯。虽然在iOS5中一开始运行良好,但我意识到在iOS4.3中没有调用viewDidAppear,因此我将以下代码放在根目录中: - (void)navigationController:(UINavigationController *)navigationController didShowViewControl
- (void)navigationController:(UINavigationController *)navigationController
didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
[viewController viewDidAppear:animated];
}
此后,该应用程序开始在iOS4.3中正常工作。但是,在iOS5中没有,因为它调用了两次viewdide(第一次调用的是viewdide,第二次调用的是来自navigationController:didShowViewController:animated:
)
我应该怎么做才能只调用一次ViewDid
非常感谢使用[[UIDevice currentDevice]systemVersion]检查用户正在运行的iOS版本;如果是4.3,请调用ViewDidDisplay方法。您不应该手动调用
ViewDidDisplay:
,请让它由UIKit
为您调用。如果删除手动调用,则只应调用一次。如果调用两次,并且在将代码添加到根导航时,您只能调用,为什么不从ViewDidDisplay(您在iOS5上创建的第一个代码)中删除代码只保留在4.3和5中都有效的解决方案?我看到的唯一真正的解决方案(或者更确切地说是iOS 4.x的解决方案),如果您在视图中设置了某种状态,将显示调用,并检查在后续调用中是否已设置,例如
-(void)viewWillAppear:(BOOL)animated {
if (!viewWillAppearCalled) {
viewWillAppearCalled = YES;
/* do stuff */
}
}
然后,为了与iOS 4.x兼容,您可以安全地手动调用它
对于ViewDidDisplay、ViewWillEnglish和ViewDidEnglishe也可以执行相同的操作。您可能还有另一个问题(为什么在iOS 4上不调用ViewDidEnglish) 但是,我在这方面也遇到了iOS 5和iOS 4之间的不一致,因为我使用了自定义容器视图控制器(既不是UINavigationController,也不是uitabarcontroller)。恢复iOS 4兼容性的修复程序是在容器视图控制器中实现以下方法:
- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers {
return NO;
}
那不是有点脏吗?我知道我可以用那种方法解决它,但我认为应该有更正确的方法。@Ibaivi-有时候你只需要做这些事情。与其用
systemVersion
检查版本,不如检查类的存在,或者是一个类响应一个选择器,该选择器添加到您想要的目标操作系统上。它在iOS5中只调用了一次,但如果我这样做,viewDidAppear将不会在iOS4.3中被调用……您可能应该修复基本问题。在按下视图控制器时,您是否做了任何异常操作?不,Firoze,我已尝试了所有操作,但NavigationController没有在任何视图控制器中调用ViewDidDisplay和ViewWillDisplay。我在第一个选项卡中有一个UITabViewController和一个UINavigationController,它加载了几个viewcontroller老实说,每次我看到一个项目,其中那些生命周期方法是不可靠的,这是因为容器控制器的结构或表示中的常见错误。让人看一下代码。我相信您可以使它在ios4中始终如一地工作,而不会出现任何奇怪的问题。等等,您是说在另一个UITabBarController
的第一个选项卡中有另一个UITabBarController
?