最近做項(xiàng)目遇到了這樣一個(gè)問題:在一個(gè)頁面中點(diǎn)擊模態(tài)彈出視圖再dismiss回原來的頁面并在window上添加子視圖,但是無論怎么弄都沒法,后來發(fā)現(xiàn)原來是獲取window出現(xiàn)了問題:
我們習(xí)慣獲取window的方法有以下幾種:
1. UIWindow *window = [[UIApplication sharedApplication].windows lastObject];
2.UIWindow *window = [UIApplication sharedApplication].keyWindow
3.UIWindow *window = [[[UIApplication sharedApplication] delegate] window]
(或UIWindow *window = [[UIApplication sharedApplication].delegate window])
但事實(shí)證明只有第三種方法是最有安全保障,無危害的.
因?yàn)?
(1)在rootViewController中的viewDidLoad:方法中調(diào)用[[UIApplication sharedApplication].keyWindow addSubview:]有可能無效,因?yàn)檫@時(shí)候[UIApplication sharedApplication].keyWindow獲取額window為nil,因?yàn)檫@個(gè)時(shí)候appdelegate中的keywindow還沒有創(chuàng)建成功
(2)同上,我遇到的問題也是如此,而我用的方法是UIWindow *window = [[UIApplication sharedApplication].windows lastObject];這個(gè)時(shí)候window還沒創(chuàng)建成功,你根本無法獲取
這個(gè)問題其實(shí)很常見净赴,不知道各位有沒有注意到!
如有問題,歡迎指正!