【问题标题】:Is it a MUST for viewWillAppear to have [super viewWillAppear] method as wellviewWillAppear 是否也必须具有 [super viewWillAppear] 方法
【发布时间】:2015-07-26 10:58:33
【问题描述】:

我将 iAd/AdMob 广告代码放在...

-(void)viewWillAppear:(BOOL)animated{}

广告效果非常好,就像我现在在所有 iOS 设备上一样。 当我将我的 iPhone 连接到 Xcode 并单击 Product -->Analyze 时,一条消息状态...

UIViewController 子类“iPhoneSIX”中的viewWillAppear:instance 方法缺少[super viewWillAppear:] 调用

我只是偶然发现了这个Product-->Analyze 的东西。我真的需要添加[super viewWillAppear],即使一切都在目前的所有设备上运行良好。如果我不注意Product-->Analyze 问题导航器,Apple 会拒绝我的应用吗?

还有,什么...

[super viewWillAppear:YES];

调用这个有什么作用?

【问题讨论】:

    标签: ios xcode appstore-approval analyzer viewwillappear


    【解决方案1】:

    在决定接受或拒绝您的应用时,Apple 并没有具体说明。它只遵循指导方针,并没有过多地涉及您的特定方法。

    致电[super viewWillAppear:YES] 是一种最佳做法,我会推荐它。始终包含 super 可确保在执行任何附加代码之前调用超类中的任何代码。因此,如果您或其他人编写了一个期望执行某些代码的超类,则可以保证您仍然执行它,而不是仅仅覆盖子类中的整个方法。

    假设你有一个MyViewController 类型的视图控制器,它是UIViewController 的子类。然后假设你有另一个MyOtherViewController 类型的视图控制器,它是MyViewController 的子类。假设您现在在viewWillAppear 中编写MyOtherViewController 中的一些内容。如果你先调用super,它会在执行任何代码之前调用MyViewController中的viewWillAppear。如果MyViewController中的viewWillAppear首先调用super,那么它会在执行任何代码之前调用UIViewController中的viewWillAppear

    【讨论】:

    • 你应该尽可能地传递传递给你重写的方法的参数,而不是像YES这样的具体值,除非你有非常故意的这样做的理由。因此,[super viewWillAppear:animated] 是最佳实践。
    【解决方案2】:

    根据Apple:(强调我的)

    这个方法在接收者的视图即将被调用之前被调用 添加到视图层次结构并在配置任何动画之前 显示视图。您可以覆盖此方法以执行自定义任务 与显示视图相关联。例如,您可以使用这个 将状态栏的方向或样式更改为的方法 与正在呈现的视图的方向或样式相协调。 如果你重写了这个方法,你必须在你的某个地方调用 super 实施。

    【讨论】:

      【解决方案3】:

      我很确定 Apple 不会因为您的应用未能在覆盖的方法上调用 super 而拒绝您的应用,主要是因为在某些情况下您可能特别希望避免调用 super

      也就是说,正如 Josh Gafni 所说,这样做绝对是最佳做法,除非您有充分的理由不这样做。还要记住一些视图控制器子类(不记得具体是哪些,但也许UICollectionViewController)只有在它们的视图生命周期方法被适当调用时才能正常工作,所以不调用super 肯定会破坏一些类(有时在你可能没有意识到的微妙方式)。

      因此我的建议是将调用添加到super(通常作为方法中的第一行),看看事情是否继续正常工作。如果没有,请花一点时间尝试了解发生的不同情况,看看是否可以用不同的方式解决它。一般来说,您应该始终(作为一种习惯)在您覆盖的任何视图生命周期方法上提供对 super 的调用。

      【讨论】:

        猜你喜欢
        • 2023-04-04
        • 2011-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-03
        • 2016-03-24
        相关资源
        最近更新 更多