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?
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];
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.
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)!
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 rootViewControler
w 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.
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.
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
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
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.
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:
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
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