Błąd "oczekuje się, że okna aplikacji będą miały kontroler widoku głównego po zakończeniu uruchamiania aplikacji" podczas uruchamiania projektu z Xcode 7, iOS 9

Po uruchomieniu funkcji

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Jest awaria:

 Assertion failure in 
-[UIApplication _runWithMainScene:transitionContext:completion:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-

 *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', `enter code here`reason: 'Application windows are expected to have a root view controller at the end of application launch'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000109377885 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x0000000108df0df1 objc_exception_throw + 48
    2   CoreFoundation                      0x00000001093776ea +[NSException raise:format:arguments:] + 106
    3   Foundation                          0x0000000108a42bb1 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 198
    4   UIKit                               0x000000010760e350 -[UIApplication _runWithMainScene:transitionContext:completion:] + 2875
    5   UIKit                               0x000000010760b73f -[UIApplication workspaceDidEndTransaction:] + 188
    6   FrontBoardServices                  0x000000010b87fd7b FrontBoardServices + 163195
    7   FrontBoardServices                  0x000000010b880118 FrontBoardServices + 164120
    8   CoreFoundation                      0x00000001092a20f1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    9   CoreFoundation                      0x0000000109297eac __CFRunLoopDoSources0 + 556
    10  CoreFoundation                      0x0000000109297363 __CFRunLoopRun + 867
    11  CoreFoundation                      0x0000000109296d78 CFRunLoopRunSpecific + 488
    12  UIKit                               0x000000010760b091 -[UIApplication _run] + 402
    13  UIKit                               0x000000010760f79b UIApplicationMain + 171
    14  bbwc                                0x00000001037a9998 main + 344
    15  libdyld.dylib                       0x000000010a45ca05 libdyld.dylib + 10757
    16  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

Ten projekt jest stary projekt, co należy zrobić, aby go zbudować i uruchomić z Xcode 7 i iOS 9?

 79
Author: Drarok, 2015-06-17

10 answers

Z komunikatu o błędzie:

Oczekuje się, że okna aplikacji będą miały kontroler widoku głównego po zakończeniu uruchamiania aplikacji

Ile lat ma ten" stary " projekt? Jeśli to więcej niż kilka lat, czy nadal masz:

[window addSubview:viewController.view];

Zamiast tego powinieneś zastąpić go:

[window setRootViewController:viewController];
 162
Author: James Webster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-18 12:29:47

Jeśli już Ustawiłeś rootViewController swojego ja.okno w aplikacji delegować i nadal dostaje ten błąd w czasie wykonywania, to prawdopodobnie masz więcej niż jedno okno w aplikacji, z których jedno może nie mieć rootviewcontroller skojarzony. Możesz zapętlić okna aplikacji i powiązać pusty kontroler viewController z rootViewController, aby naprawić błąd, który otrzymujesz.

Oto kod, który pętli przez okna aplikacji i kojarzy pusty ViewController do rootViewController jeśli brakuje okna.

NSArray *windows = [[UIApplication sharedApplication] windows];
for(UIWindow *window in windows) {
    NSLog(@"window: %@",window.description);
    if(window.rootViewController == nil){
        UIViewController* vc = [[UIViewController alloc]initWithNibName:nil bundle:nil];
        window.rootViewController = vc;
    }
}

Update: widocznie jest okno dedykowane pasku stanu, które zazwyczaj powoduje ten problem. Powyższy kod powinien naprawić ten błąd.

 33
Author: Bms270,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-20 03:19:06

XCODE 7 wymaga, aby wszystkie okna miały rootViewController Możesz użyć easy:

UIViewController* vc = [[UIViewController alloc]initWithNibName:nil bundle:nil];
self.window.rootViewController = vc;

To działa dobrze, jeśli trzeba używać tylko UIWindow (dla łatwych przykładów z dowolnych tutoriali - przed Xcode 7)!

 21
Author: Envoy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-17 15:37:41

Wygląda na to, że od iOS 9.1 (?) lub Xcode 7.1 any UIWindow instantiated during application(_:didFinishLaunchingWithOptions:) musi mieć ustawiony rootViewController przed opuszczeniem tej metody.

Poprzednio wystarczyło, aby tylko główne okno miało ustawione rootViewController Podczas tej metody. Teraz każda instancja UIWindow musi mieć poprawną właściwość rootViewController.

Winowajcą może być twój własny kod, jeśli użyjesz UIWindow, a także każdej innej biblioteki trzeciej, która spróbuje zainicjować nową instancję UIWindow w tym czasie (np. nakładki komunikatów na pasku stanu itp.).

Uwaga: pojawia się również ten sam błąd, jeśli nie ustawisz rootViewControlerw głównym oknie lub jeśli scenoryboard nie jest prawidłowo skonfigurowany. Wspominając o tym na marginesie, ponieważ te przypadki są dość oczywiste i proste do naprawienia.

 13
Author: lipka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-27 13:09:26

To też mnie dzisiaj ugryzło, a naprawienie tego kosztowało mnie kilka godzin: moja aplikacja ma okno w " MainWindow.xib", wraz z kontrolerem nawigacyjnym i towarzyszącym mu kontrolerem widoku głównego, które zostały automatycznie utworzone w odpowiedniej kolejności, z Xcode 6 i iOS8.

Na iOS9 Ta aplikacja nadal działa dobrze po pobraniu z AppStore, ale NIE gdy nowo zbudowany z Xcode 7 i uruchomić na iOS 9. W momencie, gdy delegat aplikacji wykonuje swoje applicationDidBecomeActive: metoda kontroler widoku głównego jest teraz , a nie załadowany, jak kiedyś! To sprawiło, że kontroler widoku głównego przegapił połączenie z moim kodem stanu przywracania.

Naprawiłem to poprzez utworzenie własnej instancji kontrolera widoku głównego w kodzie i jawne przywrócenie jego stanu z viewDidLoad.

 3
Author: RickJansen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-04 15:44:53

Powinieneś ustawić właściwość rootviewcontroller każdego okna w swojej aplikacji

 2
Author: alla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-17 03:42:53

Po prostu ustaw rootViewController na navigationController, który jest Twoim Uiviewcontrollerem w App-delegate.RB jak mój kod poniżej. Jestem nowy w ruby, ale mam nadzieję, że to pomogło...

rootViewController = UIViewController.alloc.init

@window.rootViewController = navigationController
 1
Author: BigPun86,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-22 11:10:41

Wpadłem w ten problem z aplikacją, którą bardziej lub mniej odziedziczyłem. Po sprawdzeniu, że storyboard został prawidłowo skonfigurowany jako główny interfejs aplikacji i że storyboard miał Kontroler RootViewController, nadal otrzymywałem awarię.

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Application windows are expected to have a root view controller at the end of application launch'

To, co odkryłem po jakimś dalszym dochodzeniu, że katastrofa była spowodowana wywołaniem jakiejś logiki widzenia (SVProgressHud) - (void)applicationDidBecomeActive:(UIApplication *)application. Wydaje się, że to nowe zachowanie w Xcode7, ale z tego co wiem SVProgressHud odnosił się do rootviewcontroller zanim został ustawiony przez storyboard. Ostatecznie aktualizacja SVProgressHud do 2.0 naprawiła błąd.

 1
Author: Bueno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-31 18:40:20

Mam starszy projekt, który działał w iOS 8, ale nie iOS 9. Jeśli twój główny interfejs jest ustawiony na MainWindow.xib, update it to a storyboard. To mi to naprawiło:

  1. Utwórz nowy projekt, Aplikacja z pojedynczym widokiem jest w porządku.
  2. Skopiuj główny.storyboard file do swojego projektu lub możesz po prostu stworzyć swój własny.
  3. Otwórz Ustawienia projektu i ustaw Główny Interfejs na główny.storyboard Ustaw Główny Interfejs na główny.storyboard
 0
Author: Adrian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-21 17:23:39

Swift 2 rozwiązanie, które zadziałało dla mnie:

Wstaw poniższy kod w AppDelegate -> didFinishLaunchingWithOptions

self.window!.rootViewController = storyboard.instantiateViewControllerWithIdentifier("YourRootViewController") as? YourRootViewControllerClass
 0
Author: Fox5150,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-31 18:45:55