UIViewController сообщил, что отвечает на addChildViewController: на iOS 4 - PullRequest
7 голосов
/ 16 ноября 2011

Кто-нибудь еще сталкивался с этим? Следующий код сообщает «ДА» при работе на симуляторе iOS 4, но согласно документации Apple метод addChildViewController доступен только в iOS 5 и более поздних версиях. Это не похоже на правильное поведение, это ошибка?

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

Ответы [ 3 ]

3 голосов
/ 18 ноября 2011

Я думаю, что это ошибка.Вызов 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 Simulator оба отвечают, что является правильным поведением.

2011-11-18 09:59:31.250 testViewFunctionality[932:f803] YES addChildViewController:
2011-11-18 09:59:31.252 testViewFunctionality[932:f803] YES automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers

Я использую XCode 4.2на льва.Когда я просматриваю UIViewController.h на платформе 4.3 Simulator, там не упоминается addChildViewController: или автоматически ForwardAppearanceAndRotationMethodsToChildViewControllers , но единственный включенный SDK - 5.0.

enter image description here

Я полагаю, что если вы хотите быть осторожными, вы можете протестировать работающую версию iOS на работающем устройстве.См. Как проверить версию iOS?

0 голосов
/ 18 марта 2013

Вполне возможно, что этот метод существовал в предыдущей версии iOS, но он еще не был общедоступным. Apple обычно добавляет частные методы с подчеркиванием, но было известно, что подобные вещи делались раньше.

0 голосов
/ 18 марта 2013

Да, это ошибка, и она никогда не будет исправлена.В качестве обходного пути вместо проверки доступности метода addChildViewController: можно проверить метод removeFromParentViewController.Последний недоступен до iOS 5.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...