0

我创建了一个类别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初始化。据推测,我以这种方式规避了它的方法中有更多和关键的东西。initUIResponderUIViewControllerinit

问题是,我有一个包含许多视图控制器的庞大项目。它应该适用于 iOS 6 和 iOS 7。我认为使用类别,我可以避免修改项目中的所有视图控制器。

如何解决这个问题?是否有另一种可以替代的方法?

4

0 回答 0