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

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

if([UIViewController instancesRespondToSelector:@selector(addChildViewController:)]) {
    NSLog(@"YES"); 
} else {
    NSLog(@"NO");
}

我认为这是一个错误。 调用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");
    }
}

在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

在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

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

在这里输入图像描述

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


是的,这是一个错误,它永远不会被修复。 作为一种解决方法,您可以检查removeFromParentViewController方法,而不是检查addChildViewController:方法的可用性。 后者在iOS 5.0之前不可用。


这种方法很可能存在于以前版本的iOS中,但它尚未公开。 苹果通常在私有方法的前面加上下划线,但之前已经知道这样做。

链接地址: http://www.djcxy.com/p/10007.html

上一篇: UIViewController reported as responding to addChildViewController: on iOS 4

下一篇: In Node.js, is it possible to tell where a watched file was moved to?