iphone - viewDidAppear 在同一个实例上调用两次,但仅在该类第一次从 NIB 加载时调用

标签 iphone cocoa-touch

我有一个导航 Controller 。其中一个 View 在其 viewDidAppear: 中添加了自定义 subview 。我注意到,启动应用程序后第一次导航到此 View Controller 的实例时,viewDidAppear: 调用两次。如果我从堆栈中弹出此 View 并再次导航到它,则每次外观仅调用一次 viewDidAppear: 。所有后续出现都会调用 viewDidAppear: 一次。

对我来说,问题是当我第一次进入这个 View 时,我最终得到的 subview 数量是原来的两倍。我通过引入标志变量或类似变量来解决这个问题,但我想了解发生了什么以及为什么在这种情况下会得到两次调用。

最佳答案

您永远不应该依赖 -viewWillAppear:/-viewDidAppear: 与消失变体适当平衡地调用。虽然系统 View Controller 将尽最大努力始终正确地将调用括起来,但我不知道他们是否能保证这一点,当然,当使用自定义 View Controller 时,您可能会发现可以多次调用这些调用的情况。

简而言之,您的 -viewWillAppear:/-viewDidAppear: 方法应该是幂等的,这意味着如果 -viewDidAppear: 在一个实例中被调用两次行在你的 Controller 上,它应该表现正常。如果您想加载自定义 View ,您可能需要在 -viewDidLoad 中执行此操作,然后只需将屏幕上的内容(如果尚未加载)放入 -viewDidAppear:.

您还可以在 -viewDidAppear: 方法中放置一个断点,以查看为什么它在第一次出现时被调用两次。

关于iphone - viewDidAppear 在同一个实例上调用两次,但仅在该类第一次从 NIB 加载时调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3199099/

相关文章:

objective-c - 仅将日期作为 NSDate 添加到核心数据中

iphone - 如何在将数据保存到 iPhone 通讯录后立即显示一个人的记录?

iphone - CGContextSetShadow 不产生任何结果

iphone - 通过 "number of items supported"授权 iPhone 软件

iphone - UDID 替换?

iphone - 如何将文本的背景图片设置到UIlabel中?

ios - 在 XIB 之外设置 UITableViewCell 背景

iphone - 我可以使用 CALayer 委托(delegate)做什么?

ios - 从自定义表格单元格中发送参数到 segue?

ios - 我怎样才能普遍禁用横向?