Мое приложение запускается только с UIWindow
. Я программно добавляю контроллер вида в self.window
в application:didFinishLaunchingWithOptions:
.
myViewController = [[UIViewController alloc] init:...];
...
[self.window addSubview:myViewController.view];
[self.window makeKeyAndVisible];
В то же время я запускаю фоновый процесс:
[NSThread detachNewThreadSelector:@selector(startupOperations) toTarget:self withObject:nil];
startupOperations
выглядит примерно так:
NSAutoreleasePool *threadPool = [[NSAutoreleasePool alloc] init];
// Load data
...
// When your done, call method on the main thread
[self performSelectorOnMainThread:@selector(showMainViewController) withObject:nil waitUntilDone:false];
// Release autorelease pool
[threadPool release];
showMainViewController
удаляет myViewController, создает UITabBarController
и устанавливает его в качестве основного вида окна:
[self.myViewController.view removeFromSuperview];
self.myViewController = nil;
tabBarController = [[UITabBarController alloc] init];
...
[self.window addSubview:tabBarController.view];
[self.window makeKeyAndVisible];
Вопросы:
Все контроллеры представления возвращают YES для shouldAutorotateToInterfaceOrientation:
. Вращение работает нормально для myViewController
, но как только tabBarController
становится видимым, вращение перестает работать, и интерфейс появляется в книжной ориентации. В чем причина такого поведения?
Кроме того, в iOS 4.x UIWindow имеет свойство rootViewController. Какова роль этого свойства? Новые шаблоны используют rootViewController
вместо [self.window addSubview:...]
. Почему это так?