Setelah menjalankan fungsi
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
ada kecelakaan:
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
Proyek ini adalah proyek lama, apa yang harus saya lakukan untuk membuatnya dibangun dan dijalankan dengan Xcode 7 dan iOS 9?
Jawaban:
Dari pesan kesalahan Anda:
Berapa umur proyek "lama" ini? Jika sudah lebih dari beberapa tahun, apakah Anda masih memiliki:
Anda harus menggantinya dengan:
sumber
Jika Anda telah menyetel rootViewController self.window Anda di delegasi aplikasi dan masih mendapatkan kesalahan ini saat runtime, Anda mungkin memiliki lebih dari satu jendela di UIApplication, salah satunya mungkin tidak memiliki rootViewController yang terkait. Anda bisa melakukan loop melalui jendela aplikasi Anda dan mengaitkan viewController kosong ke rootViewControllernya untuk memperbaiki kesalahan yang Anda dapatkan.
Berikut adalah kode yang mengulang melalui jendela aplikasi dan mengaitkan ViewController kosong ke rootViewController jika tidak ada jendela.
Pembaruan: Rupanya ada jendela yang didedikasikan untuk bilah status yang biasanya menyebabkan masalah ini. Kode di atas harus memperbaiki kesalahan ini.
sumber
XCODE 7 mengharuskan semua Windows harus memiliki rootViewController Anda dapat menggunakan dengan mudah:
Ini berfungsi dengan baik jika Anda hanya perlu menggunakan UIWindow (untuk contoh mudah dari Tutorial apa pun - sebelum Xcode 7)!
sumber
Tampaknya sejak iOS 9.1 (?) Atau Xcode 7.1 yang
UIWindow
dipakai selamaapplication(_:didFinishLaunchingWithOptions:)
perlu memiliki saturootViewController
set sebelum meninggalkan metode itu.Sebelumnya cukup hanya jendela utama yang memiliki satu
rootViewController
set selama metode itu. Sekarang setiapUIWindow
instance harus memilikirootViewController
properti yang valid .Pelaku di sini bisa jadi kode Anda sendiri jika Anda menggunakan
UIWindow
dan juga pustaka pihak ketiga lainnya yang mencoba menginisialisasiUIWindow
contoh baru selama ini (seperti hamparan pesan bilah status, dll.).CATATAN : Anda juga mendapatkan kesalahan yang sama jika Anda tidak mengatur
rootViewControler
di jendela utama Anda atau jika storyboard Anda tidak diatur dengan benar. Menyebut ini sebagai catatan tambahan karena kasing tersebut cukup jelas dan mudah untuk diperbaiki.sumber
Ini telah menggigit saya hari ini juga, dan saya membutuhkan beberapa jam untuk memperbaikinya: Aplikasi saya memiliki jendela di "MainWindow.xib", lengkap dengan pengontrol navigasi dan pengontrol tampilan root yang menyertai, yang semuanya secara otomatis dipakai dalam urutan yang benar , dengan Xcode 6 dan iOS8.
Di iOS9, Aplikasi tersebut masih berjalan dengan baik saat diunduh dari AppStore, tetapi tidak saat baru dibuat dengan Xcode 7 dan dijalankan di iOS 9. Pada saat delegasi aplikasi sedang menjalankan metode applicationDidBecomeActive: pengontrol tampilan root sekarang tidak dimuat, karena itu dulu! Itu membuat pengontrol tampilan root melewatkan panggilan ke kode status pemulihan saya.
Saya memperbaikinya dengan membuat instance pengontrol tampilan root sendiri, dalam kode, dan memulihkan statusnya dari viewDidLoad, secara eksplisit.
sumber
Anda harus menyetel properti rootviewcontroller setiap jendela di aplikasi Anda
sumber
Saya memiliki proyek lama yang bekerja di iOS 8 tetapi tidak iOS 9. Jika Antarmuka Utama Anda disetel ke MainWindow.xib, perbarui ke storyboard. Ini memperbaikinya untuk saya:
sumber
Cukup setel rootViewController Anda ke navigationController yang merupakan UIViewController Anda di app-delegate.rb seperti kode saya di bawah ini. Saya baru di ruby tetapi harap ini membantu ...
sumber
Saya mengalami masalah ini dengan aplikasi yang kurang lebih saya warisi. Setelah memverifikasi bahwa storyboard disiapkan dengan benar sebagai antarmuka utama aplikasi dan storyboard memiliki RootViewController, saya masih mengalami error.
Apa yang saya temukan setelah penyelidikan lebih lanjut bahwa kecelakaan itu disebabkan oleh beberapa logika tampilan (SVProgressHud) yang dipanggil
- (void)applicationDidBecomeActive:(UIApplication *)application
. Ini tampaknya menjadi perilaku baru di Xcode7 tetapi sejauh yang saya tahu SVProgressHud mereferensikan rootviewcontroller sebelum ditetapkan oleh storyboard. Terakhir, memperbarui SVProgressHud ke 2.0 telah memperbaiki bug.sumber
Solusi Swift 2 yang berhasil untuk saya:
Sisipkan kode di bawah ini di AppDelegate -> didFinishLaunchingWithOptions
self.window!.rootViewController = storyboard.instantiateViewControllerWithIdentifier("YourRootViewController") as? YourRootViewControllerClass
sumber