是否必须为viewWillAppear提供[super viewWillAppear]方法

时间:2015-05-14 17:45:09

标签: ios xcode appstore-approval analyzer viewwillappear

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

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

广告的效果非常好,就像我现在在所有iOS设备上使用它们一样。 当我将iPhone连接到Xcode并点击Product -->Analyze时,会显示一条消息...

viewWillAppear:子类'iPhoneSIX'中的UIViewController实例方法缺少[super viewWillAppear:]调用

我偶然偶然发现了Product-->Analyze这件事。我是否真的需要添加[super viewWillAppear],即使所有设备上的所有设备都能正常运行。如果我不注意Product-->Analyze问题导航器,Apple会拒绝我的应用吗?

另外,是什么......

[super viewWillAppear:YES];

这叫做什么?

3 个答案:

答案 0 :(得分:11)

根据Apple :(强调我的)

  

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

答案 1 :(得分:6)

在决定接受或拒绝您的应用时,Apple没有具体说明。它只遵循指导方针,而这些指导方针并没有在特定方法的杂草中得到那么多。

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

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

答案 2 :(得分:0)

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

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

因此我的建议是添加对super的调用(通常作为方法的第一行),看看事情是否继续正常。如果没有,花一点时间试图以不同的方式理解发生的事情,看看你是否可以用不同的方式解决它。一般来说,你应该总是(作为习惯的力量)在你可能的覆盖的任何视图生命周期方法上调用super