UIViewController报告为响应addChildViewController:在iOS 4上

Hua*_*ing 7 uiviewcontroller ios4 ios

有人遇到过这种情况么?在iOS 4模拟器上运行时,以下代码报告"YES",但根据Apple文档,addChildViewController方法仅适用于iOS 5及更高版本.这似乎不是正确的行为,这是一个错误吗?

if([UIViewController instancesRespondToSelector:@selector(addChildViewController:)]) {
    NSLog(@"YES"); 
} else {
    NSLog(@"NO");
}
Run Code Online (Sandbox Code Playgroud)

Joe*_*oel 3

我认为这是一个错误。调用 addChildViewController 似乎也可以在没有任何警告或错误的情况下运行。

我写了以下viewDidLoad:

- (void)viewDidLoad
{
    [super viewDidLoad];

    MyChildView *aChildViewController = [[MyChildView alloc] initWithNibName:@"MyChildView" bundle:nil];

    // Do any additional setup after loading the view, typically from a nib.
    SEL mySelector = @selector(addChildViewController:);
    if([UIViewController instancesRespondToSelector:mySelector] == YES) {
        NSLog(@"YES addChildViewController:"); 
        [self addChildViewController:aChildViewController];
    } else {
        NSLog(@"NO addChildViewController:");
    }

    if([UIViewController instancesRespondToSelector:@selector(automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers)] == YES) {
        NSLog(@"YES automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers");

    } else {
        NSLog(@"NO automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers");
    }
}
Run Code Online (Sandbox Code Playgroud)

在 iOS 4.3 模拟器中,我看到以下输出。这两条消息仅限于 IOS 5.0 及更高版本。看来 addChildViewController 在 4.3 模拟器中响应不正确。我没有 4.3 设备来在实际设备上进行测试。

2011-11-18 09:55:12.161 testViewFunctionality[873:b303] YES addChildViewController:
2011-11-18 09:55:12.162 testViewFunctionality[873:b303] NO automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers
Run Code Online (Sandbox Code Playgroud)

在 iOS 5.0 模拟器中,两者都会做出响应,这是正确的行为。

2011-11-18 09:59:31.250 testViewFunctionality[932:f803] YES addChildViewController:
2011-11-18 09:59:31.252 testViewFunctionality[932:f803] YES automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers
Run Code Online (Sandbox Code Playgroud)

我在 Lion 上使用 XCode 4.2。当我查看 4.3 模拟器框架上的 UIViewController.h 时,没有提到addChildViewController:automaticForwardAppearanceAndRotationMethodsToChildViewControllers,但唯一包含的 SDK 是 5.0。

在此输入图像描述

我想如果你想谨慎一点,你可以在正在运行的设备上测试正在运行的 iOS 版本。请参阅如何检查 iOS 版本?