콘솔에 다음과 같은 오류가 발생합니다.
응용 프로그램 시작시 응용 프로그램에 루트 뷰 컨트롤러가 있어야합니다
아래는 내 application:didFinishLaunchWithOptions
방법입니다.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Set Background Color/Pattern
self.window.backgroundColor = [UIColor blackColor];
self.tabBarController.tabBar.backgroundColor = [UIColor clearColor];
//self.window.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"testbg.png"]];
// Set StatusBar Color
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent];
// Add the tab bar controller's current view as a subview of the window
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
Interface Builder에서 UITabBarController
의 대리자는 App Delegate에 연결됩니다.
이 문제를 해결하는 방법을 아는 사람이 있습니까?
답변
나는이 같은 문제가 있었다. main.m을 확인하십시오. 마지막 인수는 UIApplicationDelegate 프로토콜을 구현하는 클래스 이름으로 설정해야합니다.
retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
답변
AppDelegate에서 교체
[window addSubview:[someController view]];
에
[self.window setRootViewController:someController];
답변
로드 된 첫 번째보기 컨트롤러를 변경하려고 할 때 동일한 오류가 발생했습니다.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
처음에는 오류가 정확히 어디에서 발생했는지 알지 못했기 때문에 오류를 좁히고 무엇이 잘못되었는지 알았습니다. 실제로 화면에 표시되기 전에보기 표시를 변경하려고 시도한 것으로 나타났습니다. 따라서 솔루션은이 코드를 뷰 컨트롤러에서 이동하여 문제를 일으켰습니다.
- (void)viewDidLoad
에
- (void)viewDidAppear:(BOOL)animated
오류가 더 이상 나타나지 않습니다. 내 문제는 구체적으로 UIAlertView
쇼 제작으로 인해 발생했습니다 .
귀하의 경우 tabBarController의 활성 뷰 컨트롤러에서 코드를 확인하는 것이 좋습니다 (해당 뷰 컨트롤러의 문제 일 수 있음). 그래도 작동하지 않으면 코드 대신 nib 파일에서 시작 설정을 설정하십시오. 또는 코드에서 수행하려면 코드를 tabBarController의 활성 뷰 컨트롤러의 적절한 메소드로 이동하십시오.
행운을 빕니다!
답변
“빈 응용 프로그램”템플릿으로 시작한 다음 XIB를 수동으로 추가 할 때이 문제가 발생했습니다. Sunny에서 제안한대로 기본 Nib 이름을 설정하여 문제를 해결했습니다. 이 시나리오에서 누락 된 단계는 제거 중입니다
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
…에서
application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Xib 파일에서 생성 된 창의 인스턴스를 덮어 쓰게됩니다. 이것은 ViewController를 만들고 XIB 파일의 창 및 앱 델리게이트와 연결했다고 가정합니다.
답변
이것은 나에게 일어났다. .plist 파일을 편집하여 해결했습니다. Main nib 파일 기본 이름을 지정하십시오 (MainWindow.xib 여야 함). 이것이 도움이되기를 바랍니다.
답변
ios5 SDK로 프로젝트를 빌드 할 때 최근에 동일한 문제가 발생합니다. 처음에는 제대로 빌드되고 실행되었지만 그 후에 오류가 나타났습니다.
제 경우에는 해결책이 다소 간단했습니다.
누락 된 것은 어떻게 든 내 응용 프로그램 대상의 요약 탭에서 기본 인터페이스 속성이 지워졌습니다. 다시 설정해야했습니다.
이것이 핵심이 아니며 tabBarController가 여전히 nil이면 항상 프로그래밍 방식으로 창과 루트 컨트롤러를 만들 수 있습니다. 폴백으로 다음 코드를 프로젝트에 추가했습니다.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if (!window && !navigationController) {
NSLog(@"Window and navigation controller not loaded from nib. Will be created programatically.");
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
UIViewController *viewController1, *viewController2;
viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:nil] autorelease];
viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:nil] autorelease];
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil];
self.window.rootViewController = self.tabBarController;
}
else {
[window addSubview:[tabBarController view]];
}
[self.window makeKeyAndVisible];
return YES;
}
이것은 sho의 솔루션이 구현 된 경우에만 작동합니다.
답변
iOS9로 업그레이드 하고이 오류가 발생하지 않았습니다. 나는 그것을 고칠 수 있었지만 아래 코드를 추가했다.- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
NSArray *windows = [[UIApplication sharedApplication] windows];
for(UIWindow *window in windows) {
if(window.rootViewController == nil){
UIViewController* vc = [[UIViewController alloc]initWithNibName:nil bundle:nil];
window.rootViewController = vc;
}
}