После запуска функции
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
происходит сбой:
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
Это старый проект, что мне делать, чтобы он собирался и запускался с Xcode 7 и iOS 9?
Ответы:
Из вашего сообщения об ошибке:
Сколько лет этому «старому» проекту? Если прошло больше нескольких лет, остались ли у вас:
Вместо этого вы должны заменить его на:
источник
Если вы уже установили rootViewController своего self.window в делегате приложения и по-прежнему получаете эту ошибку во время выполнения, то у вас, вероятно, есть более одного окна в вашем UIApplication, одно из которых может не иметь связанного rootViewController. Вы можете прокручивать окна приложения и связать пустой viewController с его rootViewController, чтобы исправить полученную ошибку.
Вот код, который просматривает окна приложения и связывает пустой ViewController с rootViewController, если окно его отсутствует.
Обновление: по-видимому, есть окно, посвященное строке состояния, которое обычно вызывает эту проблему. Приведенный выше код должен исправить эту ошибку.
источник
XCODE 7 требует, чтобы вся ОС Windows имела rootViewController. Вы можете легко использовать:
Он работает хорошо, если вам нужно использовать только UIWindow (для простых примеров из любых учебников - до Xcode 7)!
источник
Кажется, что начиная с iOS 9.1 (?) Или Xcode 7.1 любой
UIWindow
экземпляр, созданный во время,application(_:didFinishLaunchingWithOptions:)
должен иметьrootViewController
созданный набор перед выходом из этого метода.Раньше было достаточно, чтобы
rootViewController
во время этого метода было установлено только главное окно . Теперь у любогоUIWindow
экземпляра должен быть действующийrootViewController
свойство.Виновником здесь может быть ваш собственный код, если вы используете
UIWindow
и любую другую стороннюю библиотеку, которая пытается инициализировать новыйUIWindow
экземпляр в это время (например, наложения сообщений в строке состояния и т. Д.).ПРИМЕЧАНИЕ . Вы также получите ту же ошибку, если не установите в
rootViewControler
главном окне или если раскадровка настроена неправильно. Упомяну об этом в качестве примечания, поскольку эти случаи довольно очевидны и их легко исправить.источник
Это тоже меня укусило сегодня, и мне потребовалось несколько часов, чтобы исправить это: в моем приложении есть окно в "MainWindow.xib", в комплекте с контроллером навигации и сопутствующим контроллером корневого представления, которые были автоматически созданы в надлежащем порядке , с Xcode 6 и iOS8.
На iOS9 это приложение по-прежнему работает нормально при загрузке из AppStore, но не при новой сборке с Xcode 7 и запуске на iOS 9. В то время, когда делегат приложения выполняет свой метод applicationDidBecomeActive:, корневой контроллер представления теперь не работает. загружен, поскольку он раньше было! Это заставило контроллер корневого представления пропустить вызов моего кода состояния восстановления.
Я исправил это, создав экземпляр корневого контроллера представления сам в коде и явно восстановив его состояние из viewDidLoad.
источник
Вы должны установить свойство rootviewcontroller каждого окна в своем приложении.
источник
У меня есть более старый проект, который работал в iOS 8, но не в iOS 9. Если ваш основной интерфейс установлен на MainWindow.xib, обновите его до раскадровки. Это исправило это для меня:
источник
Просто установите rootViewController на navigationController, который является вашим UIViewController в app-delegate.rb, как в моем коде ниже. Я новичок в рубине, но надеюсь, что это помогло ...
источник
Я столкнулся с этой проблемой с приложением, которое я унаследовал больше или меньше. После проверки правильности настройки раскадровки в качестве основного интерфейса приложений и наличия в раскадровке контроллера RootViewController я все еще получал сбой.
После дальнейшего расследования я обнаружил, что сбой был вызван вызовом некоторой логики представления (SVProgressHud)
- (void)applicationDidBecomeActive:(UIApplication *)application
. Это кажется новым поведением в Xcode7, но насколько я могу судить, SVProgressHud ссылался на rootviewcontroller до того, как он был установлен раскадровкой. В конечном итоге обновление SVProgressHud до 2.0 устранило ошибку.источник
Решение Swift 2, которое сработало для меня:
Вставьте приведенный ниже код в AppDelegate -> didFinishLaunchingWithOptions
self.window!.rootViewController = storyboard.instantiateViewControllerWithIdentifier("YourRootViewController") as? YourRootViewControllerClass
источник