4 回答
TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊
如果您已經(jīng)在應(yīng)用程序委托中設(shè)置了self.window的rootViewController,并且在運(yùn)行時(shí)仍收到此錯(cuò)誤,則您的UIApplication中可能有多個(gè)窗口,其中一個(gè)窗口可能沒有與rootViewController相關(guān)聯(lián)。您可以循環(huán)瀏覽應(yīng)用程序窗口,并將空的viewController與其rootViewController關(guān)聯(lián),以解決您遇到的錯(cuò)誤。
這是一個(gè)循環(huán)遍歷應(yīng)用程序窗口的代碼,如果缺少窗口,則將一個(gè)空的ViewController與rootViewController關(guān)聯(lián)。
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;
}
}
更新:顯然有一個(gè)專門用于狀態(tài)欄的窗口,通常會(huì)導(dǎo)致此問題。上面的代碼應(yīng)解決此錯(cuò)誤。
TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊
XCODE 7要求所有Windows必須具有rootViewController您可以使用easy:
UIViewController* vc = [[UIViewController alloc]initWithNibName:nil bundle:nil];
self.window.rootViewController = vc;
如果您只需要使用UIWindow(對(duì)于任何教程的簡(jiǎn)單示例-Xcode 7之前的版本),則效果很好!
TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
從iOS 9.1(?)或Xcode 7.1 開始,在離開該方法之前,任何UIWindow實(shí)例化的實(shí)例都 application(_:didFinishLaunchingWithOptions:)需要具有一個(gè)rootViewControllerset。
以前,rootViewController在該方法期間僅主窗口具有一個(gè)集就足夠了?,F(xiàn)在,任何UIWindow實(shí)例都需要具有有效的rootViewController屬性。
如果您使用此代碼UIWindow以及UIWindow在此期間嘗試初始化新實(shí)例的任何其他第三方庫(kù)(例如狀態(tài)欄消息覆蓋等),則可能是您自己的代碼。
注意:如果未rootViewControler在主窗口中設(shè)置或情節(jié)提要板設(shè)置不正確,也會(huì)收到相同的錯(cuò)誤。提及這一點(diǎn)作為旁注,因?yàn)檫@些案例非常明顯且易于解決。
- 4 回答
- 0 關(guān)注
- 778 瀏覽
添加回答
舉報(bào)
