UIViewController сообщил, что отвечает на addChildViewController: на iOS 4

кто-нибудь еще сталкивался с этим? Следующий код сообщает «ДА» при запуске на симуляторе iOS 4, но, согласно документам 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 Simulator я вижу следующий вывод. Оба сообщения ограничены 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 на Lion. Когда я просматриваю UIViewController.h на фреймворке 4.3 Simulator, не упоминается addChildViewController: или автоматическиForwardAppearanceAndRotationMethodsToChildViewControllers, но единственным включенным SDK является 5.0.

введите описание изображения здесь

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

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

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

  • iOS - передача накопленных данных по длинной цепочке UIViewControllers
  • Вставить segue - динамически переключать начальный UIViewController и содержащий UIViewController динамически
  • Где инициализировать что-то еще в UIViewController
  • Обрабатывайте различные контроллеры представлений в приложении: создание контроллеров пользовательского содержимого
  • Скрыть или временно удалить дочерний ViewController из parentViewController?
  • iPhone, iOS 8: Как представитьViewController меньше, чем оригинальный контроллер представления?
  • UITableViewController против UIViewController
  • Закрытие только ImagePicker и прохождение изображения в ScrollViewController
  • Отобразить clearColor UIViewController над UIViewController
  • Вопросы rootViewController от UIWindow
  • Анимация UIView продолжает работать после того, как новый контроллер представления помещается в стек
  • Interesting Posts
    Давайте будем гением компьютера.