Это случается с некоторыми стандартными проектами, основанными на окнах IB, но, в конечном счете, вам нужно окно и представление, чтобы показать что-то пользователю.
Только представление:
Учтите это.Я создал пустой проект, добавил представление (просто MyView.xib), добавил кнопку к этому и к этому коду.Нет корневых контроллеров - только окно и представление.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
UINib *nib = [UINib nibWithNibName:@"MyView" bundle:nil];
UIView *myView = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
[[self window] addSubview:myView];
[self.window makeKeyAndVisible];
return YES;
}
Для типичного окна:
-info.plist указывает на MainWindow.xib (Mainбазовое имя файла), владелец файла указывает на делегата приложения, viewController делегата приложения указывает на UIViewController.Затем, как правило, для окна rootviewController устанавливается значение viewController, установленное выше.
- (BOOL)application:(UIApplication *)application didFinis hLaunchingWithOptions: (NSDictionary *)launchOptions
{
self.window.rootViewController = self.viewController;
Но, если вы посмотрите на это приложение на основе навигации (проект MasterDetail) , MainWindow.xib отсутствует.,
main.m указывает на appDelegate.
делегат приложения создает главный контроллер в navigationController, а созданный навигационный контроллер программным образом становится rootViewContoller
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
MasterViewController *masterViewController = [[[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil] autorelease];
self.navigationController = [[[UINavigationController alloc] initWithRootViewController:masterViewController] autorelease];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
return YES;
}
И, наконец, в этом программном примере Windows rootViewController даже не установлен.
Вид контроллера навигации добавляется непосредственно в окно.В конце дня в окне только вид.Вы можете установить его или корневой контроллер может управлять им.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// create window since nib is not.
CGRect windowBounds = [[UIScreen mainScreen] applicationFrame];
windowBounds.origin.y = 0.0;
[self setWindow:[[UIWindow alloc] initWithFrame:windowBounds]];
// create the rootViewController
_mainViewController = [[MainViewController alloc] init];
// create the navigationController by init with root view controller
_navigationController = [[UINavigationController alloc] initWithRootViewController:_mainViewController];
// in this case, the navigation controller is the main view in the window
[[self window] addSubview:[_navigationController view]];
[self.window makeKeyAndVisible];
return YES;
}