응용 프로그램 실행 종료 시 루트 뷰 컨트롤러가 있어야 함
콘솔에 다음 오류가 나타납니다.
응용 프로그램 실행 종료 시 루트 뷰 컨트롤러가 있어야 함
는 저의 ★★★★★★★★★★★★★★★★★★.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의 대리인이 앱 대리인에 연결되어 있습니다.
이 문제를 해결할 방법을 아는 사람?
AppDelegate에서 대체
[window addSubview:[someController view]];
로.
[self.window setRootViewController:someController];
저도 같은 문제가 있었어요.메인 체크.M.마지막 인수는 UIApplicationDelegate 프로토콜을 구현하는 클래스의 이름으로 설정해야 합니다.
retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
로딩된 첫 번째 뷰 컨트롤러를 변경하려고 할 때 동일한 오류가 발생했습니다.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
처음에는 정확히 어디에서 오류가 발생하는지 잘 몰랐기 때문에 범위를 좁혀서 무엇이 잘못되었는지 알아냈습니다.실제로 화면에 나타나기 전에 화면 표시를 바꾸려고 했던 것 같습니다.따라서 해결책은 이 코드를 뷰컨트롤러로 이동시키는 것이었고, 그 때문에 문제가 발생하였습니다.
- (void)viewDidLoad
로.
- (void)viewDidAppear:(BOOL)animated
에러가 표시되지 않게 되었습니다.제 문제는 특히, 이 제품의UIAlertView
이 경우 tabBarController의 액티브뷰 컨트롤러에서 코드를 체크하는 것이 좋습니다(그 뷰 컨트롤러에서는 문제가 있을 수 있습니다).그래도 작동하지 않으면 코드 대신 nib 파일에서 시작 설정을 시도하거나, 코드로 설정하려면 코드를 탭바컨트롤러의 활성 뷰컨트롤러의 적절한 방법으로 이동하십시오.
행운을 빕니다.
"empty application" 템플릿에서 시작하여 XIB를 수동으로 추가할 때 받았습니다.써니의 제안대로 Nib의 메인 이름을 설정하여 해결했습니다.이 시나리오에서 누락된 단계는
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
부터
application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Xib 파일에 생성된 창의 인스턴스를 덮어씁니다.이는 ViewController를 생성하여 XIB 파일의 창 및 App Delegate와 함께 연결했다고 가정합니다.
나한테도 이런 일이 있었어.plist 파일을 편집하면 해결됩니다.기본 니브 파일 기본 이름을 지정합니다.(Main Window.xib이어야 합니다).이게 도움이 되길 바라.

최근 ios5 sdk로 프로젝트를 작성할 때도 같은 문제가 발생하였습니다.처음에는 정상적으로 빌드되어 동작하고 있었지만, 그 후 에러가 발생했습니다.
내 경우 해결책은 비교적 간단했다.
부족한 것은 어플리케이션 타깃의 [Summary]탭의 [Main Interface]속성이 지워진 것입니다.그래서 다시 맞춰야 했어요.
이것이 포인트가 아니고 tabBarController가 아직 제로일 경우 언제든지 프로그램 방식으로 창과 루트 컨트롤러를 만들 수 있습니다.로서 나는 내 에 다음 했다.
- (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로 업그레이드 했는데 갑자기 에러가 나기 시작했어요.했지만, 아래의 를 정정 the to to to to to to에 했습니다.- (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;
}
}
위의 제안들 중 어느 것도 나의 문제를 해결하지 못했다.저는 이렇게 했어요.
추가:
window.rootViewController = navigationController;
그 후:
[window addSubview:navigationController.view];
내 대리인의 입장에서
- (void)applicationDidFinishLaunching:(UIApplication *)application {
- Nib 파일에서 "창"을 선택합니다.
- "속성 검사기"에서 "시작 시 표시됨"을 선택합니다.
![이미지![ ]](https://i.stack.imgur.com/cY3GG.png)
- 이 문제는 nib 파일이 수동으로 생성될 때 발생합니다.
- 이 수정은 스토리보드 모드가 아닌 일반 니브 모드에서 작동합니다.
iOS5용 RootViewController 추가 방법
않은 [ ]> [ New File ]를.[ RootViewController ]는 [File ]> [ New ]> [ New File ]를 선택합니다.UIViewController subclassRootViewController라는 이름을 붙이고 With XIB for User Interface(이미 XIB for User Interface)의 선택을 해제하고 이 코드를 AppDelegate :: didFinishLaunchingWithOptions에 넣습니다.
rootViewController = [[RootViewController alloc] init];
window.rootViewController = rootViewController;
확실히 - RootViewController.h를 Import하여 변수를 생성해야 합니다.
RootViewController와 AppDelegate에 대한 좋은 기사입니다.
이 에러도 있었습니다만, 지금까지의 회답과는 달리, 새롭게 생성된 컨트롤러(xcode 4.2, ios5)의 「loadView」메서드를 코멘트하지 않았기 때문입니다.
//Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView
{
}
심지어 그 방법이 프로그래밍 방식으로 뷰를 작성하는 방식이라고 알려줬는데, 제가 평소에 사용하는 viewDidLoad와 너무 비슷해 보였기 때문에 놓쳤습니다.
해결하려면 니브 또는 스토리보드를 사용하여 뷰 계층을 프로그래밍 방식으로 만들지 않을 경우 이 방법을 삭제하십시오.
나도 이 문제가 있어. 나는 내 프로젝트를 xcode4.2.1로 실행했어. 나는 거기에 있는 모든 코멘트를 읽었지만, 아무도 나에게 쿨하지 않아. 잠시 후, 나는 코드의 한 조각을 코멘트한 것을 발견했어.
//self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
그리고 나서 나는 그것을 수정하지 않았다.난 다 괜찮아.이게 너희들에게 도움이 되길 바라.
응용 프로그램 위임자에 이 기능이 있는지 확인하십시오.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions {
return YES;
}
didFinishLaunchingWithOptions가 YES를 반환하는지 확인합니다.'return YES' 행을 삭제한 경우 오류가 발생합니다.이 오류는 스토리보드 사용자에게 특히 자주 발생할 수 있습니다.
의 첫 는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.MenuViewController붙였습습니니다
MenuViewController *menuViewController = [[MenuViewController alloc]init];
self.window.rootViewController = menuViewController;
앱 위임 메서드에서 다음을 수행합니다.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
}
됐다.
iOS 5.0 전후로 약간의 변경이 있어 루트 뷰 컨트롤러가 필요합니다.코드가 GLES2Sample 등 오래된 샘플코드를 기반으로 하는 경우 해당 코드샘플에는 루트뷰 컨트롤러가 생성되지 않았습니다.
를 들어에서 (GLES2Sample)applicationDidFinishLaunchingglView를 사용합니다.
- (void) applicationDidFinishLaunching:(UIApplication *)application
{
// To make the 'Application windows are expected
// to have a root view controller
// at the end of application launch' warning go away,
// you should have a rootviewcontroller,
// but this app doesn't have one at all.
window.rootViewController = [[UIViewController alloc] init]; // MAKE ONE
window.rootViewController.view = glView; // MUST SET THIS UP OTHERWISE
// THE ROOTVIEWCONTROLLER SEEMS TO INTERCEPT TOUCH EVENTS
}
그러면 경고가 사라지며, 그렇지 않으면 앱에 큰 영향을 주지 않습니다.
탭 바 컨트롤러의 IBOutlet을 Interface Builder의 루트 뷰에 연결하려고 합니다.
self.window.rootViewController = self.tabBarController;
하지만 사실 그런 오류는 본 적이 없어요.
다음 방법으로 문제를 해결했습니다(위의 다른 솔루션은 도움이 되지 않습니다).
"Main Interface"와 관련된 풀다운 메뉴에서 다른 항목을 선택한 다음 "Main Window"를 다시 선택한 후 다시 빌드합니다.

같은 문제에 부딪혔는데 그걸 사용하고 있었어요.
의 ★★★의 할당storyboard InitialViewController의 ★★★★★★★★★★★★★★★★★★에rootViewController.
인
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
...
UIStoryboard *stb = [UIStoryboard storyboardWithName:@"myStoryboard" bundle:nil];
self.window.rootViewController = [stb instantiateInitialViewController];
return YES;
}
이것으로 문제가 해결되었습니다.
Xcode 4.3으로 업그레이드한 직후부터 같은 문제가 발생하기 시작했습니다.프로젝트를 처음부터 시작할 때만(빈 프로젝트를 만들고 나서 UIView Controller를 만들고 나서 별도의 nib 파일을 만듭니다).
이전에 사용하던 모든 회선을 삽입하고 연결이 올바른지 확인한 후 계속 오류가 발생하고 뷰 컨트롤러(root Controller로 설정)를 통해 로드하려고 했던 nib 파일이 시뮬레이터에 표시되지 않았습니다.
Xcode를 통해 단일 뷰 템플릿을 생성하여 코드와 비교한 결과 문제가 발견되었습니다!
Xcode 4.3 에서는 디폴트로 메서드 -(void)loadView가 뷰 컨트롤러 구현 섹션에 추가되어 있습니다.그 안에 있는 댓글들을 꼼꼼히 읽어본 결과 무엇이 문제인지 알 수 있었다.코멘트는 뷰를 프로그래밍 방식으로 작성하는 경우 loadView메서드를 덮어쓰도록 지시하고 있습니다(또한 패러프레이싱 중입니다).그렇지 않으면 니브를 사용하는 경우 loadView를 덮어쓰지 않도록 지시했습니다.이 메서드 안에는 다른 것이 없었기 때문에 실제로 nib 파일을 사용하는 동안 메서드를 덮어쓰고(아무것도 하지 않고) 있었습니다.그 때문에 에러가 발생했습니다.
해결책은 구현 섹션에서 loadView 메서드를 완전히 삭제하거나 [super loadView]를 추가하여 부모 메서드를 호출하는 것이었습니다.
NIB 파일을 사용하면 다른 코드를 추가하면 NIB 파일이 덮어쓰게 됩니다.
로그에 같은 에러 메세지가 기록되어 있습니다.어플리케이션: did Finish Launching With Options에서 UIALert View가 팝업되었습니다.루트 뷰 컨트롤러가 로드를 완료할 때까지의 시간을 확보하기 위해 alert View에 대한 콜을 지연시킴으로써 이 문제를 해결했습니다.
응용 프로그램: did Finish Launching With Options:
[self performSelector:@selector(callPopUp) withObject:nil afterDelay:1.0];
1초 후에 호출됩니다.
- (void)callPopUp
{
// call UIAlertView
}
저도 같은 문제가 있었어요.저처럼 윈도우 기반 애플리케이션을 처음부터 구축하는 경우 다음을 수행해야 합니다(주의: Xcode 4.2의 단계입니다).
0. 응용 프로그램 위임자가 UIApplicationDelegate 프로토콜을 준수하는지 확인합니다.
예를 들어 대리인을 MyAppDelegate라고 합니다.MyAppDelegate.h에는 다음과 같은 기능이 있습니다.
@interface MyAppDelegate :
NSObject <UIApplicationDelegate> // etc...
1. main.m에서 응용 프로그램 위임자를 지정합니다.
예를들면,
#import "MyAppDelegate.h"
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv,
nil, NSStringFromClass([MyAppDelegate class]));
}
}
2. 메인 윈도 인터페이스 파일을 만듭니다.
이를 수행하려면 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 새 파일을 선택합니다.여기서 iOS -> User Interface 섹션에서 Window를 선택합니다.
프로젝트에 파일을 추가한 후 프로젝트 요약으로 이동합니다(프로젝트를 마우스 왼쪽 버튼으로 누르고 요약을 누르십시오).iPhone/iPod Deployment Info(및 해당하는 iPad 섹션)에서 "Main Interface(기본 인터페이스)" 콤보 상자에서 새 인터페이스 파일을 선택합니다.
3. 인터페이스 에디터로 모든 것을 접속합니다.
파일 목록에서 인터페이스 파일을 선택하여 인터페이스 에디터를 기동합니다.
유틸리티 창이 열려 있는지 확인합니다.
[ Utilities ]페인의 [Objects]목록에서 [Window]개체 아래 공간으로 개체를 드래그하여 새 개체를 추가합니다.개체를 선택합니다.[ Utilities ]페인으로 [Identity]인스펙터를 클릭합니다.클래스를 응용 프로그램 위임자로 변경합니다(이 예에서는 MyAppDelegate).
MyAppDelegate 연결 검사기를 실행합니다.윈도 콘센트를 인터페이스 파일에 이미 존재하는 윈도에 연결합니다.
[파일 소유자(File's Owner)][유틸리티(Utilities)](Identity)스펙터를 클릭합니다.를 「클래스」로 변경합니다.UIApplication
파일 소유자의 연결 검사기를 불러옵니다.대리자 아웃렛을 MyAppDelegate 개체에 연결합니다.
4. 마지막으로 인터페이스 파일에서 Window 개체를 클릭합니다.[ Attributes ]인스펙터를 엽니다."시작 시 표시됨"이 선택되어 있는지 확인합니다.
그게 내가 할 수 있는 전부야행운을 빕니다.
MTStatusBarOverlay를 사용하면 이 오류가 발생합니다.
MTSatusBarOverlay는 루트 컨트롤러가 없는 추가 창([UIApplication shared Application]창)을 만듭니다.
이것은 문제를 일으키지 않을 것 같다.
XCode 4.6.3 및 iOS 6.1을 사용하여 UI를 스토리보드로 교체한 후에도 동일한 오류가 발생함
AppDelegate의 didFinishLaucningWithOptions에서 모든 코드를 클리어하여 해결.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
return YES;
}
오르도데이이 을 덧붙이는 .didFinishLaunchingWithOptions네비게이션 컨트롤러
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
// Instantiate the main menu view controller (UITableView with menu items).
// Pass that view controller to the nav controller as the root of the nav stack.
// This nav stack drives our *entire* app.
UIViewController *viewController = [[XMMainMenuTableViewController alloc] init];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
// Instantiate the app's window. Then get the nav controller's view into that window, and onto the screen.
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// [self.window addSubview:self.navigationController.view];
// The disabled line above was replaced by line below. Fixed Apple's complaint in log: Application windows are expected to have a root view controller at the end of application launch
[self.window setRootViewController:self.navigationController];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
이 문제는 제가 무심코 코멘트를 작성했기 때문에 발생했습니다.
[self.window makeKeyAndVisible];
부터
- (BOOL)application:(UIApplication*) didFinishLaunchingWithOptions:(NSDictionary*)
xcode의 요약 화면에서 초기 뷰 컨트롤러를 설정할 수 있었습니다.
왼쪽 파일 탐색기에서 맨 위의 프로젝트 이름을 클릭합니다(작은 Blueprint 아이콘이 있어야 함).가운데 열의 'TARGETs(대상)' 아래에 있는 프로젝트 이름을 클릭합니다(옆에 작은 연필 'A' 아이콘이 있어야 합니다).'iPhone / iPod Deployment Info'에서 'Main Interface'를 찾습니다.드롭다운에서 옵션을 선택할 수 있습니다.
「sho」답변(UIApplication Main의 4번째 파라미터는 메인컨트롤러 이름이어야 함)에 코멘트를 붙입니다.
저는 최근 Main Window.xib를 사용하는 앱의 '모델'을 Main Window.xib를 사용하여 프로그램적으로 창을 구성하도록 변경하였습니다.이 앱은 Main Window를 자동으로 생성하는 오래된 템플릿을 사용했습니다.iPhone 5에 대해 다른 컨트롤러 뷰 XIB를 지원하고 싶었기 때문에 App Delegate를 만들 때 프로그램적으로 올바른 XIB를 선택하는 것이 더 쉽습니다.Main Window.xib도 프로젝트에서 삭제했습니다.
문제는 UIApplication Main의 네 번째 파라미터를 채우는 것을 잊어버리고 Project Summary의 "Main Interface"에서 MainWindow를 제거하는 것을 잊어버린 것입니다.
이로 인해 큰 문제가 발생하였습니다.그 때문에, 「애플리케이션에서는, 다음과 같은 문제가 발생할 가능성이 있습니다.개발용 디바이스에서는, 그러나 App Store에 접속했을 때에, Main Window가 번들에 포함되어 있지 않기 때문에, 소비자 폰이 다운되어 버렸습니다.버그 수정에 대한 신속한 검토를 요청해야 했습니다.
또, 설정을 변경해 앱을 전면에 배치했을 때에, 빈 UIView와 같은 흰색 블록이 표시되는 일이 있습니다.아이폰5에서는 320x480 블록임이 분명했다.아마도 사라진 Main Window는 이전 크기를 사용하여 개발 모드로 생성되었을 것입니다.충돌에 대한 첫 번째 보고가 받은 편지함에 도착했을 때 이 버그를 발견했습니다.
XCode가 아닌 App Store에서 앱을 설치하면 실제로 앱이 크래쉬하고 Main Window 문제가 로그에 나타나기 때문에 특별한 디바이스 조합이 아님을 알 수 있었습니다.IOS 버전
Mike Flynn의 답변에 덧붙이자면, Xcode 7로 업그레이드하고 iOS 9 기기에서 앱을 실행한 이후, 저는 이것을 제 컴퓨터에 추가했습니다.(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
// Hide any window that isn't the main window
NSArray *windows = [[UIApplication sharedApplication] windows];
for (UIWindow *window in windows) {
if (window != self.window) {
window.hidden = YES;
}
}
이 문제는 Interface Builder가 올바르게 설정되어 있지 않은 경우에 발생합니다.
앱 대리자 창과 viewController 콘센트가 연결되어 있는지 확인합니다.
MainWindow.xib에서 컨트롤을 누른 상태에서 App Delegate를 클릭하고 Window 개체로 끕니다.창을 선택합니다.제어권을 유지한 상태에서 App 위임자를 다시 선택하고 루트 뷰 컨트롤러로 끌어다 놓고 viewController를 선택합니다.
이 오류는 파일 소유자가 Main Window일 때도 표시됩니다.xib가 올바르게 설정되어 있지 않습니다.
파일 소유자는 UIApplication입니다.
->창에 연결된 창 콘센트가 있는 앱 위임 클래스의 오브젝트 표시
언급URL : https://stackoverflow.com/questions/7520971/applications-are-expected-to-have-a-root-view-controller-at-the-end-of-applicati
'programing' 카테고리의 다른 글
| 무료 WPF 컨트롤 및 컨트롤 템플릿은 어디서 구할 수 있습니까? (0) | 2023.04.09 |
|---|---|
| TABLOCK vs TAB록X (0) | 2023.04.09 |
| 'git push' 실행 취소 (0) | 2023.04.09 |
| 프로젝트 빌드 시 코코아팟 오류 (0) | 2023.04.09 |
| 루비, 문자열에서 마지막 N자를 제거하시겠습니까? (0) | 2023.04.09 |