我创建了一个类别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
方法UIViewController
- 所以每个都只使用of和我提供的附加代码(或不)进行UIViewController
初始化。据推测,我以这种方式规避了它的方法中有更多和关键的东西。init
UIResponder
UIViewController
init
问题是,我有一个包含许多视图控制器的庞大项目。它应该适用于 iOS 6 和 iOS 7。我认为使用类别,我可以避免修改项目中的所有视图控制器。
如何解决这个问题?是否有另一种可以替代的方法?