我已经创建了一个UIViewController
类别来处理iOS 7中的一些视图控制器怪异问题。如果没有在NDA下公开任何API,这里是被覆盖的init
方法:
@implementation UIViewController (ios7)
-(id)init {
self = [super init];
if (self) {
if ([self respondsToSelector:@selector(<iOS7OnlyMethod>)]) {
// additional setup
}
}
return self;
}
@end
我验证了在7.0模拟器中运行时条件触发,如果在6.1模拟器中运行则不会触发。
以下是谜题:虽然代码未运行,但我的标签栏中的标签栏图标在6.1中消失。但是,如果我在此.m
文件的文件检查器中取消选中我的目标(即我不在编译中包含它),则标签栏项目将照常显示。
这怎么可能?
修改
经过一番思考后,我发现我可能会覆盖init
的{{1}}方法 - 所以每个UIViewController
只能使用UIViewController
{{}}进行初始化1}}和我提供的附加代码(或不代码)。据推测,init
在UIResponder
方法中有更多更重要的东西,我已经用这种方式规避了这种方法。
问题是,我有一个包含许多视图控制器的庞大项目。它应该适用于iOS 6和iOS 7.我认为有一个类别,我可以避免修改项目中的所有视图控制器。
如何解决这个问题?是否有其他可以覆盖的方法呢?