我将我的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];
这叫做什么?
答案 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
。