Ответ 1
Свойство UIWindow
rootViewController
является новым с iOS4.
Старая техника заключалась в использовании addSubview
.
Новый рекомендованный метод - установить rootViewController
.
Я заметил множество примеров для приложений iPhone в делетете приложений
- (void)applicationDidFinishLaunching:(UIApplication *)application
есть
[window addSubview: someController.view];
(1)
в отличие от
self.window.rootViewController = self.someController;
(2)
Есть ли практическая причина использовать один над другим? Правильно ли это? Контроллер имеет эквивалентную команду для номера (2), например
self.someController.rootController = self.someOtherController; // pseudocode
Свойство UIWindow
rootViewController
является новым с iOS4.
Старая техника заключалась в использовании addSubview
.
Новый рекомендованный метод - установить rootViewController
.
Просто обновите это с выпуском ios 6.
Если вы все еще используете шаблон шаблона - [UIWindow addedubview:], вероятно, вы, скорее всего, получите сообщение "Окна приложений, как ожидается, теперь будут иметь контроллер корневого представления в конце запуска приложения" на вашей консоли. Наряду с потенциальными проблемами с ротацией и проблемами размещения в вашем приложении.
Настройка окна rootViewController, как указано выше, также исправит это.
Я использую этот код:
rootViewController_ = [[RootViewController alloc] initWithFrame:[UIScreen mainScreen].bounds];
window_ = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
if ([window_ respondsToSelector:@selector(setRootViewController:)]) { // >= ios4.0
[window_ setRootViewController:rootViewController_];
} else { // < ios4.0
[window_ addSubview:rootViewController_.view];
}
Мое мнение:
self.window.rootViewController
изменяет размер rootViewController.view в зависимости от высоты строки состояния
Но если вы используете addSubview, он не будет
Например, если вы установитеRootViewController на NavigationController, навигационный контроллер будет (0,0,320,480);
но если вы установитеRootViewController на общий UIViewController, навигационный контроллер будет (0,0,320,460);
если вы используете addSubview: два диспетчера просмотра будут (0,0,320,480)
И если есть In-call-StatusBar. это также изменится для вас, когда вы используете setRoot... если вы используете addSubview, размер subview не изменится
выполните некоторые тесты с другим цветом рамки представления
Сбой - это потому, что вы вызываете метод, который не существует, а не потому, что ваши переменные не инициализируются.
-setRootViewController
не существует до iOS 4.0. Используйте
[self.window addSubview:self.tabBarController.view];
вместо этого.
Или обновите целевую планету до версии 4.0.2 или новее. Это, вероятно, менее 5% пользователей, которые не используют iOS 4 на данный момент.